[解決済み】Pythonは末尾再帰を最適化するか?
2022-04-01 03:31:43
質問
次のようなコードがあるのですが、次のようなエラーで失敗します。
RuntimeError: 最大の再帰的深度を超えました。
末尾再帰最適化(TCO)ができるように書き換えを試みました。TCOが行われていれば、このコードは成功するはずだったのだと思います。
def trisum(n, csum):
if n == 0:
return csum
else:
return trisum(n - 1, csum + n)
print(trisum(1000, 0))
PythonはどのようなタイプのTCOもしないと結論づけるべきか、それとも別の定義が必要なのでしょうか?
どのように解決するのですか?
いいえ、これからもありません。 グイド・ヴァン・ロッサム は、適切なトレースバックが可能であることを好みます。
テール再帰性排除 (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
関連
-
[解決済み】csv.Error:イテレータはバイトではなく文字列を返すべき
-
[解決済み】IndexError: invalid index to scalar variableを修正する方法
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] 末尾再帰とは何ですか?
-
[解決済み] テールコール最適化とは何ですか?
-
[解決済み】if __name__ == "__main__": は何をするのでしょうか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
python call matlab メソッドの詳細
-
風力制御におけるKS原理を深く理解するためのpythonアルゴリズム
-
Python LeNetネットワークの説明とpytorchでの実装
-
[解決済み】TypeError: unhashable type: 'numpy.ndarray'.
-
[解決済み】DataFrameのコンストラクタが正しく呼び出されない!エラー
-
[解決済み】「RuntimeError: dictionary changed size during iteration」エラーを回避する方法とは?
-
[解決済み】OSError: [WinError 193] %1 は有効な Win32 アプリケーションではありません。
-
[解決済み】NameError: 名前 'self' が定義されていません。
-
[解決済み] テールコール最適化とは何ですか?
-
[解決済み] Pythonで日付の範囲を繰り返し処理する