ホームページ >バックエンド開発 >Python チュートリアル >Python は末尾再帰最適化を実行しますか?

Python は末尾再帰最適化を実行しますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-07 19:08:14454ブラウズ

Does Python Perform Tail Recursion Optimization?

Python での末尾再帰の最適化

Python は末尾再帰を最適化しません。これは、次の理由でそれを実装しないという Guido van Rossum の明示的な決定によって確認されています。適切な保存トレースバック。

質問: Python は末尾再帰最適化が可能ですか?

答え: いいえ。

ディスカッション:

この問題を説明するには、次のことを考えてみましょう。三角級数の合計を計算する次の Python コード:

def trisum(n, csum):
    if n == 0:
        return csum
    else:
        return trisum(n - 1, csum + n)

n に大きな値を指定して実行すると、再帰の深さが過剰になるため、このコードは失敗します。末尾再帰の最適化では、更新されたパラメーターを使用して再帰呼び出しを関数の先頭へのジャンプに置き換えることで、この問題を軽減できます。

ただし、Guido van Rossum は適切なトレースバックの維持を優先したため、Python は末尾再帰の最適化を実装していません。

最適化の回避策:

末尾再帰の場合最適化が必要な場合は、Python コードを手動で変換して再帰を排除できます。以下は trisum 関数の修正バージョンです:

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

以上がPython は末尾再帰最適化を実行しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。