我有以下代码失败并出现以下错误:
RuntimeError: maximum recursion depth exceeded
我试图重写它以允许尾递归优化 (TCO)。我相信如果发生了 TCO,这段代码应该是成功的。
def trisum(n, csum):
if n == 0:
return csum
else:
return trisum(n - 1, csum + n)
print(trisum(1000, 0))
我应该断定 Python 不会产生任何类型的 TCO,还是只需要以不同的方式定义它?
最佳答案
不,从 Guido van Rossum 开始就永远不会了希望能够有适当的回溯:
Tail Recursion Elimination (2009-04-22)
Final Words on Tail Calls (2009-04-27)
您可以通过如下转换手动消除递归:
>>> def trisum(n, csum):
... while True: # Change recursion to a while loop
... if n == 0:
... return csum
... n, csum = n - 1, csum + n # Update parameters instead of tail recursion
>>> trisum(1000,0)
500500
https://stackoverflow.com/questions/13591970/