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?

下一篇: Is recursion a feature in and of itself?