我有一个问题 sys.setrecursionlimit()
从python docs这个函数:
设置Python解释器堆栈的最大深度来限制.此限制可防止无限递归导致C堆栈溢出并导致Python崩溃.最高可能的限制取决于平台.当用户具有需要深度递归的程序和支持更高限制的平台时,用户可能需要将限制设置得更高.这应该小心,因为过高的限制可能导致崩溃.
让我们来看看这个无用的递归函数:
def rec(N):
if N==0:
return 1
else:
return rec(N-1);
Run Code Online (Sandbox Code Playgroud)
现在让我们将最大递归设置为100:
sys.setrecursionlimit(100)
Run Code Online (Sandbox Code Playgroud)
如果我尝试rec(99)(100次递归调用),我得到:
RuntimeError: maximum recursion depth exceeded
Run Code Online (Sandbox Code Playgroud)
要计算rec(99)我需要将递归限制设置为105.
为什么会这样?
cor*_*iKa 16
它命名不佳.它应该说Stack Depth,而不是Recursion深度.递归意味着它是一遍又一遍的同一个线程,它是限制性的.实际上,你可以拥有100个深度调用的实际代码.我不推荐它,但你可以.他们可以逃脱它,因为在实际的世界中,你遇到这种情况的唯一时间是递归.当你因此崩溃时,看到"Recursion"这个词会让你立即知道要查找的内容而不是"Stack".
(堆栈应该给任何体面的程序员相同的线索,但说实话,你的代码只是崩溃了,你想要一个相关的错误信息,对吗?99.99999%的时间这告诉你你搞砸了什么(你错过了你的基本案例)递归.))
| 归档时间: |
|
| 查看次数: |
10346 次 |
| 最近记录: |