スクラッチ アルゴリズム チュートリアル -- 再帰

        再帰とは、オブジェクトが同様の繰り返しを示すことです。マトリョーシカ、ハノイの塔ゲーム、フラクタル パターン (コッホ雪の結晶、シャーピンの三角形など)、向かい合った 2 つの鏡、フィボナッチ数列、二分木など、生活の中で非常に一般的です。
        コンピューター サイエンスでは、再帰とは、関数定義内でそれ自体を繰り返し呼び出す行為です。関数はスクラッチのカスタム構築ブロックであり、プロセスとも呼ばれます。実際、ループと再帰は相互に変換できますが、一部のプログラミング言語 (Haskell など) ではループ構造がなく、ループ効果は再帰によってのみ達成されます。

再帰の最も単純なケースでは、針が回転しながらストップウォッチが時を刻みます。

 

        繰り返し実行と同様に、このスクリプトには再帰的な開始条件がないため、停止ボタンまたは停止ブロックで終了する必要があります。1+2+...+99+100再帰の基本的なケースをもう一度見て、の値を見つけてみましょう。

         この種の再帰は末尾再帰と呼ばれ、最もよく理解されている再帰形式です。これはプログラムの実行速度を最適化するためによく使用されます (テスト済み、スクラッチでは末尾再帰を使用しても操作速度を向上させることはできません)。そのため、バックトラッキングは必要ありません。バックトラッキングとは何ですか?

        上記の合計プログラムのプログラムが終了すると、再帰はすべて終了し、最後に呼び出した関数には戻りません。

        バックトラッキングを使用した再帰的戦略を見てみましょう
        再帰的戦略の基本的な考え方は、大規模な問題をより小さな同様のサブ問題に変換して解決することであり、ループ層の数が不確実な状況に特に適しており、非常に特殊な反復形式とみなすことができます。技術的な観点 つまり、再帰は自分自身を呼び出す動作であり、そのプロセスは次のとおりです。

         再帰プロセスは再帰アルゴリズムの重要な動作です。この重要な動作は問題解決サイクルで繰り返すことができます。最後に、再帰変数は終了条件に達すると再帰関数を終了します。問題の中でこの重要な動作を見つける方法はより困難ですが、これは再帰の概念を理解しているかどうかの違いでもあります。


簡単な例: ハノイの塔 (ハノイの塔)

        すべての n 個のリングをペグ 0 からペグ 1 に移動します。注: 大きいリングを小さいリングの上に置くことはできません。(『バチカン塔の究極の挑戦』『バチカン塔の破壊の予言』から抜粋・改作

         簡単な質問から始めましょう。今、柱 0 には 2 つの金貨があり、それらをすべて柱 1 に移動する必要があります。

単純に考えれば次のことがわかります。

(1)0---->2

(2)0--->1

(3)2---->1

合計3回の移動が必要です

再帰アルゴリズムと組み合わせると、n 個のプレートの移動を単純に 3 つのステップに分割できます。

(1) n-1 枚のプレートを 0 から 2 に移動します。

(2) n 番目のプレートを 0 から 1 に移動します。

(3) n-1 枚のプレートを 2 から 1 に移動します。

        一度に移動できるプレートは 1 つだけであるため、再帰する場合は次の判断を行う必要があります。現在移動するプレートの数 = 1 の場合、移動して前の再帰に戻ることができます。

(1) 中間のステップでは、最大のプレートを 0 から 1 に移動します。

(2) 中段以上では、補助塔(1塔)を使って0番から2番のn-1個のプレートを移動させているとみなすことができ、

(3) 中間のステップでは、補助タワー (タワー 0) を使用して 2 から 1 にある n-1 個のプレートを移動するとみなすことができます。

再帰的なコードは次のとおりです。

 再帰を開始するコードは次のとおりです。

 (0 は開始バー、1 は終了バー、2 は中間バー)


        要因成長率が非常に速いため、階数が多い場合、必要なステップ数も非常に憂慮すべきものになります。これが、64 階建てのハノイ塔を移動した後に世界が破滅する理由を説明しています (2 つ移動する必要があります)。 ^64-1 =1.8446744e+19 倍)

        再帰的戦略は、複雑なプログラムのロジックを非常によく記述することができます。これが再帰的アルゴリズムのすべてです。

おすすめ

転載: blog.csdn.net/leyang0910/article/details/132277749