「アルゴリズム」-再帰的アルゴリズム

1.再帰の概要

  • 再帰は、その名前が示すように、再帰がある場合、再帰と呼ばれます。

  • オブジェクトが部分的にそれ自体を含む場合、またはそれ自体を使用してそれ自体を定義する場合、そのオブジェクトは再帰的であると言われます。

  • プロセスがそれ自体を直接的または間接的に呼び出す場合、それは再帰的プロセスであると言われます。

  • 率直に言って、再帰は関数です。関数では、関数自体が呼び出され、そのような関数を再帰関数と呼びます。

  • 再帰の基本的な考え方は「自分を呼ぶ」です

2.再帰的プロセス

\ quad \ quad 再帰的プロセスは、再帰的プロセスと再帰的プロセス、つまりスタッキングプロセスとして理解できます。

ここに画像の説明を挿入します

ここに画像の説明を挿入します

  • 次の図は、3の階乗を計算するための特定の再帰呼び出しプロセスを示しています。
  • 赤い線はスタックへのパスプロセスです
  • 青い線はスタックに戻るプロセスです
    ここに画像の説明を挿入します

2.1「合格」

  • 渡すプロセスは、呼び出しから呼び出しメソッドの内部終了条件の検索までのプロセスです。
  • これはスタックプロセスと同等です。呼び出されるたびに、現在のパラメーター値と終了位置、つまり中断されたコード位置を記録し、スタックにマージする必要があります。
  • スタック:

ここに画像の説明を挿入します

2.2「返品」

  • 戻るプロセスは、終了条件から最も内側のメソッドが実行されたときに、呼び出し元メソッドの呼び出し元メソッドに戻るプロセスです。
  • アンスタック:

ここに画像の説明を挿入します

  • 再帰呼び出しごとに、プロセスで使用されるパラメーターとローカル変数に追加のストレージスペースを割り当てる必要があります。
  • レイヤーごとに再帰的に下向きになり、終了するときの順序は正反対です
  • したがって、各再帰呼び出しに割り当てられるスペースは、高度なスタックによって編成された再帰作業レコードを形成します。

3.再帰の適用条件

1.問題を複数のサブ問題に分解することで問題を解決でき、その後の状況を前の状態から推測できます。

2.この問題の解決策は、サブ問題の解決策と同じです。

3.問題には終了条件があります。終了条件を見つけた後、「戻る」プロセスが開始されます。

4.再帰プログラム

4.13つの要素

1.再帰ステートメント

  • 再帰ステートメントは再帰式です
  • 再帰式を書く上で最も重要な点は、問題とサブ問題の関係を見つけることです。それらの間に存在する関係を見つける方法は?最後の層と上の層の関係だけが必要です。たとえば、現在のチームの位置を知りたい場合は、前の人の位置が必要であり、+ 1が私の位置です。私は彼がどこにいるかは気にしませんが、再帰によって彼の立場を解決します。漸化式は次のように書くことができます。
// f(n) 代表当前我在队伍中的位置
// f(n-1) 代表我前边那个人的位置
// 递推公式
f(n) = f(n-1) + 1 

2.再帰的出口は、再帰的終了条件です。

  • 再帰式は非常に簡単に記述できましたが、終了条件のない再帰式は永久に実行されるため、プログラムを終了するには終了条件が必要です。では、終了条件を見つける方法は?
  • いわゆる終了条件は既知の条件です。たとえば、上記の食べ物の待ち行列の例では、最初の人が窓際で食事をしていて、目の前に誰もいないので、彼が最初の人です。一人称の位置は1ですが、どのように表示すればよいですか?
// 终止条件
f(1) = 1;

3.再帰の数

  • 限られた数の再帰が必要です

4.2完全な再帰的プログラムコード

function f(n){
    
    
    // 终止条件
	if(n == 1) retun 1;
    // 递推公式
	return f(n-1) + 1;
}

5.再帰的特性

5.1利点

  • 洗練されたプログラミング、明確なロジック、近似的な数学的再帰式、優れた読みやすさ

5.2デメリット

  • 実装効率は低いです:あなたが自分自身を呼び出すとき、メモリは毎回パラメータ値を保存するために割り当てられます。時間とメモリの消費につながります。これにより、効率が低下します。

  • メモリを過度に使用すると、メモリオーバーフローのリスクが発生する可能性があります。

おすすめ

転載: blog.csdn.net/weixin_45666566/article/details/113717773