Python は末尾再帰を最適化しますか? 質問する

Python は末尾再帰を最適化しますか? 質問する

次のコードがありますが、次のエラーで失敗します。

ランタイムエラー: 最大再帰深度を超えました

私はこれを書き直して、末尾呼び出し最適化 (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

おすすめ記事