再帰的アルゴリズムとその例

2つのコアの再帰的なアルゴリズムがあります。

1. 終了条件再帰再帰関数の戻り値と戻り型の設定機能の有無は、再帰終了条件を判定する
2. 分解下位問題を

ハノイの問題の例1--タワー

1つの#include <iostreamの>
 2  使用して 名前空間STDを、
3  ボイドハノイ(整数 nは、チャー A、チャー B、チャーC){
 4      であれば(N == 1)COUT << " から頂部ディスクを移動し    、" << << " " << C << ENDL。
5      {
 6          ハノイ(N- 1 、A、C、B)。
7          裁判所未満<< からトップディスクを移動     << A << "C << << ENDL;
 8          ハノイ(N- 1 、B、A、C);
 9      }           
 10  } 
 11  INT メイン(){
 12は、     INT N-; // ハノイスケールのタワー
13は、      << COUT " 入力しますハノイの塔あなたの規模:" << てendl;
 14      しばらく1 ){
 15          cinを>> N-;
 16          IF(N < 1)COUT << " あなたの入力をチェックしてください! << てendlを、
 17          他の BREAK ; 
 18      }
19      文字A、B、C、
 20      COUT << " 3気筒の名前を入力してください。" << ENDLを、
 21である      CIN >> A >> B >> C、 
 22は、      ハノイ(N、A、B、C)。// 解決するための関数を呼び出す
23      リターン 0 ;
 24 }

アレイの例および2--再帰溶液

1つの#include <iostreamの>
 2  使用して 名前空間STD;
 3。 INT GetSum(INT N-、INT * A){ // n型である要素の数
4。     IF(N - == 1を返す [ 0 ];
 5。      戻り GetSumを( N- 1、A)+ [N- 1 ];
 6  }
 。7  INT メイン(){
 8。     int型のサイズ; // 問題の大きさ、配列の要素、すなわち所望の数
9。      COUT << " 質問を入力してくださいサイズ:" << てendl;
10      一方、1 ){
 11。          CIN >> サイズ;
 12は、         IF(サイズ<= 0)<< COUTは、" スケールの妥当性を確認してください" << ENDL、
 13は         他の BREAK ; 
 14      } 
 15      INT * P = 新しい新しい INT [サイズ]; // 動的オープンアレイ
16      COUT << " 順番に配列要素を入力してください" << ENDL;
 17      用のint型私は= 0 ; Iは、サイズ<; Iは++ ){
 18は          CIN >> *(P +I);
 19      }
 20れる      COUT << " 各アレイ素子に与えられると:" << ENDL << GetSum(サイズ、P)、
 21は     リターン 0 ;
 22れます }

実施例3--最大アレイ再帰溶液

1の#include <iostreamの>
 2の#include <math.h>の 
 3  使用して 名前空間STD;
 4  INT getMax(INT N-、INT * A){ // 要素のn個である
5。     IF(N - == 1を返します [ 0 ];
 6      他の 戻り MAX(getMax(N- 1、A)、[N- 1。]);
 7  }
 。8  INT メイン(){
 9。     int型のサイズ; // 問題の規模の数、すなわち要素
10      COUT < < 問題の規模を入力してください:" << ENDL;
 11      ながら1 ){
 12は、          CIN >> サイズ;
 13は、         IF(サイズ<= 0)<< COUT " スケールの妥当性を確認してください" << ; ENDLを
 14          他の BREAK ; 
 15      } 
 16      INT * P = 新しい新しい INT [サイズ]; // ダイナミックアレイが開か
17。      COUT << " 順番に配列要素を入力してください" << ENDL;
 18である     ためint型 I = 0 ; Iサイズ<; I ++は){
19          CIN >> *(P + I);
 20である     }
 21で      COUT << " 入力した最大値の配列である:" << ENDL << getMax(サイズ、P)、
 22は     リターン 0 ;
 23れます }

 

おすすめ

転載: www.cnblogs.com/TYXmax/p/10988860.html
おすすめ