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 サイトの他の関連記事を参照してください。