因此,我尝试使用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()
设置或获得的实际递归限制之前引发错误?
答案 0 :(得分:3)
答案 1 :(得分:3)
您的recursive()
函数不是唯一计入限制的组件。一些Python内部结构也增加了计数器,因为Python代码也可能导致它们被多次调用。 print()
函数就是其中之一。
最重要的是,递归限制不仅适用于您编写的Python函数。它适用于整个调用堆栈。
答案 2 :(得分:2)
实际上,只要您删除“打印”功能,递归功能“ ALONE”将被精确地调用max = 3000次。这是因为python内置函数也对限制有所贡献。
<Canvas />