我很好奇 python 中的 MRD(最大递归深度)是什么,所以我写了这个:
def call(n):
print (n)
return call(n+1)
call(1)
最终结果是 979,这对我来说是个奇怪的数字。我找不到任何地方为什么这个数字是标准的。由于我是一名自学成才的程序员,我希望能用简单的术语对其进行解释。
编辑:显然它应该是 1000,但为什么是这个数字?
最佳答案
这是一个更好的测试:
n = 0
def test_recursion_limit():
def call():
global n
n += 1
call()
try:
call()
except RuntimeError:
print(n)
test_recursion_limit()
如果将它放入 spam.py
并执行它,它应该为 python2 和 python3 返回 998。由于初始 test_recursion_limit
帧,它少了一个堆栈帧。
如果你在 REPL 中运行,比如 ipython,你已经在几帧内,所以你会看到一个较低的计数——这不是递归限制被低于,而是 REPL 本身的实现使用了一些栈帧。
>>> # freshly opened ipython session
>>> import inspect
>>> len(inspect.stack())
10
您可以通过调用 sys.getrecursionlimit()
函数来检查当前的递归限制。默认值 1000 被选为一个合理的默认值,它可以防止在您意外执行无限递归调用时占用系统资源。例如,在使用自定义 __getattr__
实现时,这很容易做到。
如果您合理地破坏堆栈并且需要增加限制,可以使用 sys.setrecursionlimit
对其进行修改。
关于python - 为什么python中的最大递归深度是1000?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40115683/