////////////////////////////////////////////////// ///////////////////////////////////////////
// 13. topic IX: Fibonacci number
/ * write a function, input N, seeking Fibonacci (the Fibonacci) column item number N.
F. (n-) = {0 n-== 0;
. 1 n-==. 1;
F. (n-- . 1) + F. (n--2) n->. 1;
}
*/
static int s_RunTime = 0 ; void CalcFbio ( int mum) { printf ( " N (% d) -> f (% d) + f (% d) \ n " , mum, mum - 1 , INUM - 2 ); s_RunTime ++ ; } Int Fbio_1 ( int mum) { if (mum <= 1 ) { return INUM; } CalcFbio (mum); return Fbio_1 (mum - 1 ) + Fbio_1 (mum - 2 ); } //Optimized version -> calculating remove duplicate entries // time complexity of O (n-) int Fbio_2 ( int iNum, Vector < int > & vect) { // 1. loop exit condition IF (iNum <= . 1 ) { return iNum; } // If this F (n) has been calculated, the results of direct return IF (vect [iNum - . 1 ]> 0 ) { return vect [iNum - . 1 ]; } // 3. store the corresponding results vect [iNum - . 1 ] = Fbio_2 (iNum - . 1 , vect) + Fbio_2 (iNum - 2 , vect); CalcFbio (iNum); return vect [iNum - . 1 ]; } // non-recursive solution time complexity of O (n-) int Fbio_3 ( int iNum) { int IRES = 0 ; IF (iNum <= . 1 ) { return . 1 ; } int of iSum = 0 ; int iOne = . 1 ; int ITWO = 0 ; for ( int I = 2 ; I <= iNum; I ++ ) { of iSumIOne + = ITWO; ITWO = ; iOne iOne = of iSum; the printf ( " fbio:% D = N, the Value D =% \ n- " , I, of iSum); } return of iSum; } ///////// ////////////////////////////////////////////////// ///////////// // // a similar topic: once a frog can hop on one level, you can also hop on level 2, find the frog jumped into a total of N grade level how many jumps? int JumpStep_1 ( int iNum) { IF (iNum <= 2 ) { return iNum; } CalcFbio (iNum); return JumpStep_1 (iNum -1) + JumpStep_1(iNum - 2); } int JumpStep_2(int iNum) { #if 0 //int iSumStep = 0; int iStep1 = 1; int iStep2 = 2; while (iNum-- > 1) { iStep2 += iStep1; iStep1 = iStep2 - iStep1; printf("JumpStep: N = %d, Value = %d\n", iNum, iStep1); } return iStep1; #else #endif if (mum <= 2 ) { return INUM; } Int IRES = 0 ; int Ione = 1 ; int iTwo = 2 ; for ( int i = 3 ; i <= mum; i ++ ) { IRES = + Ions iTwo; Ione = iTwo; iTwo = IRES; printf ( " JumpStep: n =% d, value =% d \ n " , i IRES); } Return figures; } Void FiboTestFunc () { COUT << " \ n-\ n-FiboTestFunc the Start --------------- --------------> " << endl ; // for (int I = 0; I <20 is; I ++) // { // the printf ( "Fibonacci number: N =% d, Value = % d \ n", i, fbio (i)) ; // } int iNum = 10 ; the printf ( " Fibonacci number: N = D%, the Value D =% \ n- " , iNum, Fbio_1 (iNum)); the printf ( " The method of operation a number of times:% d \ n- " , s_RunTime); COUT << "========================>>>>>>>>>>>>>>>>>>>>>>>>>>>>" << endl; vector<int> vect(iNum, 0); s_RunTime = 0; printf("斐波那契数列: N = %d, Value = %d\n", iNum, Fbio_2(iNum, vect)); printf("方法二运行次数: %d\n", s_RunTime); cout << "========================>>>>>>>>>>>>>>>>>>>>>>>>>>>>" COUT, iNum, Fbio_3 (iNum));"Fibonacci number: N = D%, the Value D =% \ n-" the printf (endl;<< << "========================>>>>>>>>>>>>>>>>>>>>>>>>>>>>" << endl; s_RunTime = 0; printf("青蛙跳台阶: N = %d, Value = %d\n", iNum, JumpStep_1(iNum)); printf("方法一运行次数: %d\n", s_RunTime); cout << "========================>>>>>>>>>>>>>>>>>>>>>>>>>>>>" << endl; printf(""<< COUT, iNum, JumpStep_2 (iNum));"Frog jump step:% D = N, the Value D =% \ n- \n\n --------------- FiboTestFunc End -------------->" << endl; }