ホームページ > バックエンド開発 > Python チュートリアル > Python の再帰関数で RecursionError を回避するにはどうすればよいですか?

Python の再帰関数で RecursionError を回避するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-28 05:42:13
オリジナル
716 人が閲覧しました

How Can I Avoid RecursionError in Python's Recursive Functions?

過剰な再帰の深さと軽減戦略

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート