前回、選択ソートのアルゴリズムを学びました。pythonのアルゴリズムを予備的に理解したことで、以前にも渡したpython-recursionで非常に一般的に使用される重要なアルゴリズムを学びましょう。再帰を簡単に理解する
ためのFibonacciシーケンスは、再帰関数のFibonacciシーケンスを確認します
ただし、再帰によって問題をより明確に解決できるだけであり、パフォーマンス上の利点はないことを理解する必要があります。
再帰的アルゴリズム
または、紹介する場合:ボックスがたくさんある場合、キーを見つけるために必要なボックスを開くことができますが、ボックス内の別のボックスである可能性があります。キーを見つけたい場合、それを解決する方法はいくつかありますか?
方法a:whileループ
を使用してボックススタックを作成し、ヒープはボックスからボックスを見つけます。ボックスは、ボックスがヒープボックスに追加される場合はボックスです。キーが見つかった場合は、
2番目の方法の出力終了:再帰的なアイデアを使用して解決します。
ボックスパイルを作成します。すべてのボックスはボックスの最初の部分に相当し、すべてのボックスを開いて表示します。キーが見つかった場合は出力が終了し、キーが見つからない場合は開いたボックスはボックスの2番目の部分に相当します。最初の手順に戻ります。キー出力が見つかるまで、2番目の部分のチェックボックスをオンにするのと同じ方法とアイデアなど。
ここでも、概念を理解する必要があります-ベースライン条件と再帰条件
ベースライン条件と再帰条件
再帰を使用する場合、無限ループの状況を回避するために、各再帰はベースケースと再帰ケースの2つの部分で構成されます。再帰条件は、関数がそれ自体を呼び出すことであり、ベースライン条件は次のとおりです。無限ループの形成を避けるために、
私は理解するための単純な逆数を書きました。
def num_daoshu(num): # 这个参数是从几开始倒数
print(num) # 输出这个数字
if num <= 0: # 基线条件
return
else: # 递归条件
return num_daoshu(num - 1)
print(num_daoshu(5))
スタック
スタックは単純なデータ構造です。スタックは、データをファーストインラストアウトまたはラストインファーストアウトの方法で格納し
ます。スタック内のデータの挿入と削除は、スタックの最上位で実行されます。スタックは再帰関数で呼び出されます。キー
は引き続きボックススタックにあります。たとえば、2つのボックスAとBがあり、Aを開いてボックスCを見つけ、Cを開いて、Cが空であることがわかったので、開いているボックスBに戻ります...キーが見つかったことを確認します。
再帰呼び出しスタックはこれに似ています。
スタックのデメリット:
スタックの使用は便利ですが、多くのメモリに格納されている同様の情報を使用する可能性があり、各関数呼び出しはある程度のメモリを消費するため、スタックを高く積み上げます。コンピュータは関数呼び出しに関する多くの情報を格納します。
この状況2つの解決策があります:
1。代わりにループを再コーディングして使用します
2.テールループを使用します(これは一時的に無視される高度な再帰トピックです)。すべての言語がテールループをサポートしているわけではありません