C ++講演:再帰アルゴリズム

まず、再帰の概念
1、プログラムが直接または間接的に再帰的に呼ばれるプログラミングのスキルは(再帰)を数える自身を呼び出します。
図2は、直接的または間接的に再帰関数と呼ばれる関数自体を呼び出す
3、通常は解決するために、元の小さな問題と同様の問題の層に大規模で複雑な問題です。
第二に、再帰の基本的な考え方
、問題のすべてのレベルまで
大きな問題または1つのまたはいくつかの小さな問題が、小さなマイナーな問題にこれらの小さな問題の後、さらに分解に悪い解決策ではないと。
第三には、キーの再帰的な
キーは、再帰的に識別することで、再帰的な定義再帰の終了条件
、境界条件に問題がルール:再帰的に定義します。再帰的な定義はますますシンプルにする必要があります。
例えばN!= N *(N-1) !
再帰終了条件:問題の最も簡単な場合について説明し、もはや再帰の独自の定義を使用していません。
1!= 1
第四に、3段階の解決再帰アルゴリズム
1)再帰のための問題、外観を分析する:問題の規模と小規模の大規模な問題との関係を見つけるには、して再帰的にすることによって問題が次第に小さくなります。
停止条件を探す:2)国境管理再帰を設定します。
3)設計機能、パラメータを決定する:機能体設計と関連するパラメータを操作します。
例:最大公約数(ユークリッドアルゴリズム)
再帰:GCD(M、N)= GCD(N、Mの%N)
終了条件:GCD(M、0)= M
再帰コーディング:
GCDを(M、N-)規則// M> N
IF {(N - == 0)リターン(M);
他のリターン(GCD(N、MOD N-M));
}
見つける^ B値(高速パワー)
  、例えば、== 5 B、。
^ 5
= A *(A ^ 4)
= A *(A 2 * A 2)
= A *((A A)(A * A))

長い長いLLのtypedef;
LL binaryPow(A LL、LL B){
IF(B == 1)
リターンA;
他IF(B == 2%1。)
リターンbinaryPow A *(A、B - 1);
他{
LL NUM = binaryPow(B / 2); // 最適化
リターンNUM * NUM; //書き込まれていない直接binaryPowリターン(A、B / 2、M)* binaryPow(A、B / 2、M)
}
5、セット完全な配列の質問
1、並んで第一高、及びその後の配置の状況を心配少し;
2、症例の多数があり、副問題複数に発行する必要があります。各サブ問題が配置高値に関連している;
3、サブ問題を決定するために、すべての高いケースを列挙するために、
個別の列挙が必要です!
@アルゴリズム:再帰アルゴリズムの完全なパーミュテーション問題
要素kの完全な配列から生成//〜M、K-1サフィックス要素としての前に
空隙パーマ(リストINT []、int型K、INT M)
{
//構成完全な配列、出力
IF(K == M)
{
ため(INT I = 0; I <= M; I ++)
COUT <<リスト[I] << "";
COUT << ENDL;
}

//配列リスト、要素kから生じる〜Mの完全な配列
(INT J = K; J <= M; J ++)用
{
スワップ(リスト[K]、リスト[J]);
パーマ(リスト、K 。+ 1、m)は、
スワップ(リスト[K]、リスト[J]);
}
}
6つのハーフセットの問題は
次のように与えられた数の自然数nは、開始が順次)Nハーフセットセット(Nによって生成されてもよいです。
N SET(N)(1)、
(2)nがプラス自然数の左側に、天然ではない、より新しく追加された数の半分よりも数と
、それは自然数まで追加されるまで、このルールが処理される(3)。
例えば、セット(6)= {6,16,26,126,36,136 }。
ハーフセットのセット(6)6つの要素があります。
セットの半分がマルチセットであることに注意してください。
任意の自然数nに対して、要素の数は半分プログラミング現在のセット(n)を計算しました。
範囲Fの(N)セットの要素の数(n)を提供
デジタル例12:
集電体の前半112 212,312,412,512,612は、
元の数を無視する1 2 3 4 5 6 12
    12 13 14である
24、124 15
25 、12 516
26、126
36、136
ここに画像を挿入説明
アルゴリズム:問題の半分のセットを計算する再帰アルゴリズム
INT COMP(INT N-)
{
int型ANS = 1;
IF(N-> 1)(INT I = 1; I <= N / 2; I ++)用
ANS + = COMP(I)は、
戻りANS;
}
計算メジアンセット通報再帰アルゴリズム-検索メモリー式
のint A [1001];
int型COMP(N-INT)
{
。INT = ANS 1;
IF([N-] A> 0)リターンA [N-]; //が計算された
(INT iについて= 1。 I <= N / 2; I ++)
ANSのCoMP + =(I)、
A [N- = ANS; //結果が保存
ANSを返します;
}

元の記事を公開 ウォンの賞賛0 ビュー9

おすすめ

転載: blog.csdn.net/qq_45042822/article/details/104616780