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
·
回答问题
我在这里有这个尾递归函数:
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
。这只是堆栈溢出吗?有没有办法绕过它?
Answers
它可以防止堆栈溢出,是的。 Python(或者更确切地说,CPython 实现)不会优化尾递归,并且肆无忌惮的递归会导致堆栈溢出。您可以使用sys.getrecursionlimit
检查递归限制:
import sys
print(sys.getrecursionlimit())
并使用sys.setrecursionlimit
更改递归限制:
sys.setrecursionlimit(1500)
但这样做很危险——标准限制有点保守,但 Python 堆栈帧可能非常大。
Python 不是一种函数式语言,尾递归也不是一种特别有效的技术。如果可能,迭代地重写算法通常是一个更好的主意。
更多推荐
已为社区贡献126473条内容
所有评论(0)