所以我试图用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()
函数不是唯一计入限制的组件。一些Python内部也会增加计数器,因为Python代码也会导致它们被多次调用。 print()
功能就是其中之一。
底线是递归限制不仅适用于您编写的Python函数。它适用于整个调用堆栈。
实际上,只要删除“print”函数,递归函数“ALONE”就会被调用max = 3000次。这是因为python内置函数也有助于限制。
import sys
count = 0
def recursive(n):
global count
count = count + 1
recursive(n+1)
sys.setrecursionlimit(3000)
try:
recursive(0)
except:
print count # would print 2999