輸入n,求斐波那契數列第n項。斐波那契數列的第0項爲0,第一項爲1,之後的項依次爲前兩項之和。

思路一:

遞歸
要求第n項,首先就要求出第n-1,n-2項,依次類推。遞歸的出口就是第0項爲0,第1項爲1.使用遞歸雖然代碼很簡單,但如果n大一點的話,所產生的運行時開銷會非常大,這樣做的後果就是效率非常低下。

思路二:

非遞歸 使用非遞歸的話,效率會很高。設置兩個三個變量分別表示當前值和前兩項的值,使用循環求解。(本例中,只使用兩個變量表示這些值)

#include<stdio.h>  
#include<stdlib.h>  


//遞歸  
int fib(int n)  
{  
    if (n == 0)  
        return 0;  
    else if (n == 1)  
        return 1;  
    return fib(n - 1) + fib(n - 2);  
}  



//非遞歸  
int fib(int n)  
{  
    int num1 = 0;  
    int num2 = 1;  
    for (int i = 0; i < n; i++)  
    {  
        num1 = num1 + num2;                //將num1和num2的後一項的值保存到num1裏面  
        num2 = num1 - num2;                //再將num2換成原來num1的值  
    }  
    return num1;  
}  



//test  
int main()  
{  
    int n = 0;  
    scanf("%d", &n);  
    int ret = fib(n);  
    printf("%d\n", ret);  
    system("pause");  
    return 0;  
}  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章