次のコードがありますが、次のエラーで失敗します。
ランタイムエラー: 最大再帰深度を超えました
私はこれを書き直して、末尾呼び出し最適化 (TCO) を可能にすることを試みました。TCO が行われていれば、このコードは成功しただろうと思います。
def trisum(n, csum):
if n == 0:
return csum
else:
return trisum(n - 1, csum + n)
print(trisum(1000, 0))
Python はいかなる種類の TCO も行わないと結論付けるべきでしょうか、それとも別の方法で定義する必要があるだけでしょうか?
ベストアンサー1
いいえ、それは決して起こりませんグイド・ヴァン・ロッサム適切なトレースバックが可能なことを優先します。
末尾再帰の除去(2009-04-22)
テールコールに関する最後の言葉(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