Python中的最大递归深度是多少,以及如何增加它?
我在这里有这个尾递归函数:
def fib(n, sum):
if n < 1:
return sum
else:
return fib(n-1, sum+n)
c = 998
print(fib(c, 0))
它工作到n = 997,然后它只是打破并吐出一个“比较超出最大递归深度” RuntimeError
。 这只是一个堆栈溢出? 有没有办法避开它?
它是防止堆栈溢出的警卫,是的。 Python(或更确切地说,CPython实现)不优化尾递归,而无约束递归会导致堆栈溢出。 您可以使用sys.setrecursionlimit
更改递归限制,但这样做很危险 - 标准限制稍微保守一点,但Python堆栈框架可能相当大。
Python不是一种功能语言,尾递归不是一种特别有效的技术。 如果可能的话,迭代地重写算法通常是更好的主意。
看起来你只需要设置一个更高的递归深度
sys.setrecursionlimit(1500)
这是为了避免堆栈溢出。 Python解释器限制了递归的深度,以帮助您避免无限递归,从而导致堆栈溢出。 尝试增加递归限制(sys.setrecursionlimit)或重写无需递归的代码。
来自python网站:
sys.getrecursionlimit()
返回递归限制的当前值,即Python解释器堆栈的最大深度。 此限制可防止无限递归导致C堆栈溢出并导致Python崩溃。 它可以通过setrecursionlimit()来设置。
链接地址: http://www.djcxy.com/p/80675.html上一篇: What is the maximum recursion depth in Python, and how to increase it?