以前我們用遞迴的方法這樣來求第n個斐波那契數
int fib(int n)
但是這個演算法的效率太低,原因如下:
裡面有太多的重複計算,時間複雜度過高,導致演算法效率低下。
這算是一種較為優化的演算法
long
long fib(long
long first, long
long second, int n)//first和second表示第一項和第二項
寫成非遞迴:
#include
#include
long
long fib(int n)
return ret;
}int main()
{ int n = 0;
printf("請輸入n:\n");
scanf_s("%d", &n);
printf("%lld\n", fib(n));
system("pause");
return
0;
求第n個斐波那契數
斐波那契數指 1 1 2 3 5 8 13 21.前兩個數是1 1,從第3個數開始該數等於前兩個數之和。1.用遞迴的方法求第n個斐波那契數 但我們發現有問題,當就算第45個斐波那契數時,特別耗費時間,許久沒有結果。這是為什麼呢?我們發現fib函式在呼叫過程中有很多重複的計算,如當計算fib 35 時...
數論 求斐波那契的第N項
可能學過程式語言的同學們都一定接觸過斐波那契數列。求斐波那契數列的方法也有很多,有效率高低及空間開銷高低之分 本篇部落格將對斐波那契數列進行乙個分析,分析每一種演算法的效率及空間開銷 遞迴實現 此處不考慮爆int,單純的將其實現,下同 include using namespace std int ...
求斐波那契數列的第n項
斐波那契數列的定義如下 f 0 0 f 1 1 f n f n 1 f n 2 n 2 1,1,2,3,5,8,13,21,34,55,89,144,233,377,給出n,求f n 由於結果很大,輸出f n 1000000009的結果即可。input 輸入1個數n 1 n 10 18 output...