過剰な再帰の深さと軽減戦略
Python プログラマは、一般に深い再帰によるスタック オーバーフローに遭遇します。再帰の最大深さを超えると、RecursionError が発生します。これは、Python の CPython 実装に末尾再帰の最適化が欠けているために発生します。
末尾再帰関数の例
次の末尾再帰関数について考えてみましょう。
def recursive_function(n, sum): if n < 1: return sum else: return recursive_function(n-1, sum+n)
When n=998 で呼び出された場合、関数は次のエラーで失敗します。 RecursionError.
再帰制限の増加
Python には、現在の再帰制限を取得する sys.getrecursionlimit() 関数が用意されています。デフォルトでは、過剰なスタック消費を防ぐために、この制限は比較的低く設定されています。制限を増やすには、sys.setrecursionlimit(new_limit) を使用します。
注意
再帰制限を増やすと、潜在的に危険です。関数呼び出し情報を保持する Python スタックフレームは、サイズが大きくなる場合があります。制限を増やしすぎると、使用可能なメモリが使い果たされる可能性があります。
反復的代替
推奨されるアプローチとして、アルゴリズムを反復的に書き換えてみてください。 Python は本質的に関数型言語ではないため、末尾再帰は効率的な手法ではない可能性があります。多くの場合、反復ソリューションの方がパフォーマンスが向上します。
以上がPython の再帰関数で RecursionError を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。