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れます }