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 。这只是堆栈溢出吗?有没有办法绕过它?

原文由 quantumSoup 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 833
2 个回答

它可以防止堆栈溢出,是的。 Python(或者更确切地说,CPython 实现)不会优化尾递归,并且肆无忌惮的递归会导致堆栈溢出。您可以使用 sys.getrecursionlimit 检查递归限制:

 import sys
print(sys.getrecursionlimit())

并使用 sys.setrecursionlimit 更改递归限制:

 sys.setrecursionlimit(1500)

但这样做很危险——标准限制有点保守,但 Python 堆栈帧可能非常大。

Python 不是一种函数式语言,尾递归也不是一种特别有效的技术。如果可能,迭代地重写算法通常是一个更好的主意。

原文由 Thomas Wouters 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题