所以我正在尝试使用sys.getrecursionlimit()和sys.setrecursionlimit()方法。默认递归限制为3000.
我尝试使用以下代码检查它:
def recursive(n):
print(n)
recursive(n+1)
recursive(0)
Run Code Online (Sandbox Code Playgroud)
它确实将数字打印到2979,它会延迟一秒钟,打印2980然后提高RecursionError
RecursionError: maximum recursion depth exceeded while calling a Python object
Run Code Online (Sandbox Code Playgroud)
我知道当它超过sys.getrecursionlimit()返回的递归限制时应该引发错误,但它没有
似乎它总是在递归限制之前执行 20 次
我也试过这个:
sys.setrecursionlimit(100)
def recursive(n):
print(n)
recursive(n+1)
recursive(0)
Run Code Online (Sandbox Code Playgroud)
它仍然做同样的事情,将所有数字打印到79,延迟一秒钟,打印80然后引发完全相同的错误
为什么它会在超出我们设置或得到的实际递归限制之前引发错误sys.getrecursionlimit()?
您的recursive()函数不是唯一计入限制的组件。一些 Python 内部组件也会增加计数器,因为 Python 代码也会导致它们被多次调用。该print()功能就是其中之一。
底线是递归限制不仅适用于您编写的 Python 函数。它适用于整个调用堆栈。