Python max recursion,关于sys.setrecursionlimit()的问题

Ric*_*bby 16 python recursion

我有一个问题 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%的时间这告诉你你搞砸了什么(你错过了你的基本案例)递归.))


yan*_*yan 5

Python 运行时仍然需要进行函数调用才能访问您的函数。