所以我尝试使用 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 以了解如何分析堆栈。

10-06 01:02