该程序旨在计算质子穿过铝时对 20000 片 0.025μm 铝片的不同阻止本领。每个切片的阻止本领都会发生变化,因此必须按每个切片计算阻止本领和能量减法。
即使在尝试增加递归限制后,我也会收到堆栈溢出错误。任何援助将不胜感激!distance(x,E,n)
有变量x
,即步长,E
即能量,n
即停止本领。distance(0,13000,0.13124)
第一步、能量和停止力也是如此。
这是我的代码:
import sys
sys.setrecursionlimit(10**9)
def distance(x,E,n):
step = x + 1
if (step >= 20000):
return E
energy = E - 0.025 * 1/n #E - distance interval per step * stopping power
stop = -0.0079199 + 0.040703 * energy**(-0.4) + 0.0022677 * energy**(0.25) + 0.000058309 * energy**(0.8) #1/stopping power
return distance(step,energy,stop)
print(distance(0,13000,0.131234))