我在这里有这个尾部递归函数:
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。这只是堆栈溢出吗?有办法解决吗?
n=997
RecursionError: maximum recursion depth exceeded in comparison
是的,它可以防止堆栈溢出。Python(或更确切地说,CPython实现)无法优化尾部递归,无限制的递归会导致堆栈溢出。您可以使用以下方法检查递归限制sys.getrecursionlimit:
sys.getrecursionlimit
import sys print(sys.getrecursionlimit())
并使用以下方式更改递归限制sys.setrecursionlimit:
sys.setrecursionlimit
sys.setrecursionlimit(1500)
但是这样做很危险-标准限制有些保守,但是Python堆栈框架可能会很大。
Python不是一种功能语言,尾部递归并不是一种特别有效的技术。如果可能的话,迭代地重写算法通常是一个更好的主意。