1. 初期再帰
再帰関数: 関数内で関数自体を呼び出します。
再帰の最大深さ: 998
先ほど見たように、再帰関数は外部の力によってブロックされない限り実行を続けます。しかし、関数呼び出しの問題については以前に説明しました。関数呼び出しごとに独自の名前空間が生成されます。連続して呼び出されると名前空間がメモリを占有しすぎるため、Python はこれを防止しようとしています。再帰レベルの数を強制的に 997 に制御します (997 まで! 損をすることも、だまされることもありません...)。
この「998 理論」を証明するために使用できるもの「?ここで実験を行うことができます:
def foo(n): print(n) n += 1 foo(n) foo(1)
このことから、エラーが報告されるまでに確認できる最大数は 998 であることがわかります。もちろん、997 はメモリ最適化のために Python によって設定された数値です。私たちのプログラム. デフォルト値, もちろん、何らかの方法で変更することもできます:
import sys print(sys.setrecursionlimit(100000))
この方法で再帰の最大深さを変更できます. Python で許可される再帰の深さを 10w に設定するだけです。実際の再帰の深さは、到達可能です。深さはコンピュータのパフォーマンスに依存します。ただし、このデフォルトの再帰の深さを変更することはお勧めしません。997 レベルの再帰で問題を解決できない場合は、問題を解決するために再帰を使用するのが適切でないか、コードの書き方が不十分であるかのどちらかです~~~
この時点で、再帰はそれほど良いものではなく、while True ほど便利ではないと感じるかもしれません。しかし、世の中には「人間は循環を理解し、神は再帰を理解する」という格言があります。再帰関数を過小評価しないでください。再帰の本当の意味を理解できなかったため、多くの人が長年にわたって偉大な巨匠の境地に足を踏み入れることができませんでした。そして、私たちが将来学習するアルゴリズムの多くは再帰に関連するものになります。さあ、それを学んだ場合にのみ、それを嫌いになる資本が得られます。
2. 再帰の例の説明
ここでは、再帰で何ができるかを説明するために別の例を示します。
例 1:
ここで、アレックスさんは何歳ですかと尋ねます。言わないって言ったけど、アレックスはエゴンより2歳年上だよ。
アレックスの年齢を知りたければ、やはりエゴンに聞く必要がありますか?エゴンは、「私も言わないけど、私はウー卿より2歳年上です」と言いました。
あなたは再び呉卿に尋ねましたが、呉卿も教えてくれませんでした。彼は自分が太白より 2 歳年上だと言いました。
次に、タイバイに尋ねると、タイバイは自分は 18 歳だと答えます。
この時点でご存知でしたか?アレックスは何歳ですか?
1 | ジンシン | 18 |
---|---|---|
武様 | 20 | |
エゴン | 22 | |
アレックス | 24 |
以上がPython 再帰関数、二分探索アルゴリズムの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。