Python は末尾再帰最適化を実行しますか?
Dec 07, 2024 pm 07:08 PMPython での末尾再帰の最適化
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 までご連絡ください。

人気の記事
レポ:チームメイトを復活させる方法
3週間前
By 尊渡假赌尊渡假赌尊渡假赌
スプリットフィクションを打ち負かすのにどれくらい時間がかかりますか?
3週間前
By DDD
ハローキティアイランドアドベンチャー:巨大な種を手に入れる方法
3週間前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.説明されたエネルギー結晶と彼らが何をするか(黄色のクリスタル)
1週間前
By 尊渡假赌尊渡假赌尊渡假赌

人気の記事
レポ:チームメイトを復活させる方法
3週間前
By 尊渡假赌尊渡假赌尊渡假赌
スプリットフィクションを打ち負かすのにどれくらい時間がかかりますか?
3週間前
By DDD
ハローキティアイランドアドベンチャー:巨大な種を手に入れる方法
3週間前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.説明されたエネルギー結晶と彼らが何をするか(黄色のクリスタル)
1週間前
By 尊渡假赌尊渡假赌尊渡假赌

ホットな記事タグ

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック
Gmailメールのログイン入り口はどこですか?
7282
9


Java チュートリアル
1622
14


CakePHP チュートリアル
1342
46


Laravel チュートリアル
1258
25


PHP チュートリアル
1205
29

