件名の説明:
例:
インタプリタを実装します:
一見複雑な現実の両方フィボナッチ変形トピックであります
知識ポイント:再帰フィボナッチ
問題の説明によって、あなたは座席数に:(追加は最後から二番目でなければならない瞬間)男の子と女の子のための最終的に座って、次のルールを取得することができます。女の子は、最後から二番目利用可能に座ります。変換:I-1雌端位置は、iがケースの総数に対する女性の数の端部が同じ位置である場合、私はケースの端部に少年の数に等しい位置の数である位置-1 iが。
だから我々は2つのソリューション描くことができます:フィボナッチ直接変形をし、再帰
フィボナッチ変形:
女性の症例の数の位置= I-2総数の終了位置の端にI = I-1雄位置
I = I-1の位置の総数雌端位置
则(I)かどうか=(I-1)または(I-2)かどうか有。(1)かどうか= 2。確か(0)= 1。
再帰的な手順を記述します。
直接再帰的:
直接プログラミングの変換に漸化式により:少年の一時記憶の終了前に、ケースの使用、女子の数の終わりの前に少年の数のフロントエンドにおける少女=端の数は、女の子の端プラス良いメモリ前に男の子の数=番号の末尾に。
最後に、コードはまた、殺傷を含む。コードが低減される行動の再帰コードを、一時変数を排除します。
ピット:
なお、特別な値決意方法フィボナッチ出力0と1
ケースことに注意してくださいここで二つのオプションの再帰的メソッドをリセットするとき
完全なコード:
フィボナッチ変形:
//変性フィボナッチフィボナッチ直接 の#include <iostreamの> 使用して名前空間STD; (N-INT)INT Fiの { IF(N - == 0)リターン1; IF -リターン2(N == 1); 戻りFiの+ Fiの(N - 2)(1-N-); } int型のmain() { (偽の)IOSの:: sync_with_stdio; INT N-、 一方(N - >> CIN) { COUT << Fiの(N-)<<「\ N- 「; } 戻り0; }
直接再帰的:
書式#include <iostreamの> 使用して、名前空間STD; int型のmain() { (falseに)のiOS :: sync_with_stdio; int型N-; ロングロングTEMP、choiceMan、choiceWoman; //中央値、最後のケースに座った男性の総数は、座って最後の女の子総数 (N - >> CIN)、一方 { //場合座、最後女性と男性、それぞれ1。 choiceMan choiceWoman = = 1; のための(INT I = 1; I <N - 、Iは++) { //レコード TEMP = choiceMan ; //シートの増加した後、シートは、雌雄型端部を座るだけでき choiceMan = choiceWoman; //女の子はまた、最後の女性の最後に男性、加算することができる choiceWoman + = TEMP; //なお、割当スイッチングの順序 } COUTを<< + choiceWoman << ENDL choiceMan; } 戻り0; }
ボーリング圧縮コード:
#include <cstdioを> int型のmain() { int型N、M、W。 (〜のscanf( "%d個"、&n))を、一方 { M = W = 1。 一方、(N - > 1) { + = M W。 M = WM。 } のprintf( "%d個の\ n"、M + W)。 } }