我在这里有这个尾部递归函数:
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
。这仅仅是堆栈溢出吗?有办法解决吗?
line <n>, in <module>
堆栈中的跟踪),并且此代码需要2个堆栈帧n=1
(因为基本情况是n < 1
,因此n=1
它仍然递归)。而且我猜想递归限制不包括在内,因为它是“命中1000时出错”而不是“如果超过1000(1001)则出错”。997 + 2
小于1000,因此无法工作998 + 2
,因为它达到了极限。
recursive_function(997)
有效,它在中断998
。当您调用recursive_function(998)
它时,它使用999个堆栈帧,并且解释器添加了1帧(因为您的代码始终像顶级模块的一部分一样运行),这使其达到了1000个限制。