最大递归深度?

问题:

我在这里有这个尾递归函数:

def fib(n, sum):
if n < 1: return sum else: return fib(n-1, sum+n) c = 998 print(fib(c, 0)) [/code] 它可以工作到n = 997,那么它只是打破并且吐出“比较的超过最大递归深度”RuntimeError。这只是堆栈溢出吗?有办法绕过吗?

回答:

是防止堆栈溢出,是的。 Python(或者更确切地说,CPython实现)并不优化尾递归,无节制的递归会导致堆栈溢出。您可以使用sys.setrecursionlimit更改递归限制,但这样做是危险的 – 标准限制有点保守,但Python堆栈框架可能相当大。
Python不是功能语言,而尾递归并不是特别有效的技术。如果可能,迭代地重写算法通常是一个更好的想法。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Maximum recursion depth?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

− 2 = 3