出處——《劍指Offer》
使用遞歸實現實現斐波那契
int Fibonacci( unsigned int n )
{
if( n <= 0 )
return 0;
if( n == 1 )
return 1;
return Fibonacci( n - 1 ) + Fibonacci( n - 2 );
}
但使用遞歸時,Fibonacci( n - 1 ) + Fibonacci( n - 2 )前后兩項在進行遞歸的過程中,會出現許多重復計算,效率很低(比如重復計算Fibonacci( n - 3 ), Fibonacci( n - 4 )..... )。
可考慮使用循環實現,從下往上計算。即通過f(0) + f(1) 得到f(2), 再由f(2) + f(1)得到f(3)....直到計算出f(n)
int Fibonacci( unsigned int n )
{
int FibN, FibNOne, FibNTwo;
int i;
int result[2] = { 0, 1 };
if( n < 2 )
return result[n];
FibNOne = 0;
FibNTwo = 1;
FibN = 0;
for( i = 2; i <= n; i++ )
{ /*以第一次循環執行過程為例*/
FibN = FibNOne + FibNTwo; /*f(2) = f(0) + f(1)*/
FibNOne = FibNTwo; /*f(1)*/
FibNTwo = FibN; /*f(2)*/
}
return FibN;
}