所以我尝试使用 sys.getrecursionlimit()
和 sys.setrecursionlimit()
方法。
默认递归限制是 3000
。
我尝试使用以下代码检查它:
def recursive(n):
print(n)
recursive(n+1)
recursive(0)
它确实将数字打印到
2979
,它延迟一秒钟,打印 2980
然后提高 RecursionError
RecursionError: maximum recursion depth exceeded while calling a Python object
我知道当它超过
sys.getrecursionlimit()
返回的递归限制时应该引发错误,但它没有似乎它总是在递归限制之前执行 20 次
我也试过这个:
sys.setrecursionlimit(100)
def recursive(n):
print(n)
recursive(n+1)
recursive(0)
它仍然做同样的事情,将所有数字打印到
79
,延迟一秒钟,打印 80
然后引发完全相同的错误为什么它会在超出我们通过
sys.getrecursionlimit()
设置或获得的实际递归限制之前引发错误? 最佳答案
在调用函数之前,堆栈上有一些东西。
在这种情况下,在您调用 recursive
之前,调用堆栈似乎已经有 20 个调用深度了。
如果您真的很好奇这 20 个调用的组成部分,请参阅 here 以了解如何分析堆栈。