Python 中的最大递归深度是多少,如何增加它?
Python 中的最大递归深度是多少,如何增加它?
我有一个尾递归函数:
def recursive_function(n, sum): if n < 1: return sum else: return recursive_function(n-1, sum+n) c = 998 print(recursive_function(c, 0))
它可以运行到n=997
,然后就会中断并输出RecursionError: maximum recursion depth exceeded in comparison
。这只是堆栈溢出吗?有没有办法解决这个问题?
admin 更改状态以发布 2023年5月21日
这是防止栈溢出的一种措施,是的。Python(或者说CPython实现)不会优化尾递归,而不受限制的递归会导致栈溢出。您可以使用 sys.getrecursionlimit
检查递归限制:
import sys print(sys.getrecursionlimit())
并使用 sys.setrecursionlimit
更改递归限制:
sys.setrecursionlimit(1500)
但这样做很危险--标准限制有点保守,但Python堆栈框架可能非常大。
Python不是一种函数式语言,尾递归也不是特别高效的技术。如果可能的话,迭代地重写算法通常是一个更好的想法。