使用循環實現斐波那契數列——C


出處——《劍指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;

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM