寫乙個函式,輸入n,求斐波那契(fibonacci)數列的第n項。斐波那契數列的定義如下:
0 n = 0
f(n) = 1 n = 1
f(n-1)+f(n-2) n > 1
也就是斐波那契數列為;
首先可以想到,因為要求第n個斐波那契數,就需要知道第n-1和第n-2個斐波那契數,而求第n-1個斐波那契數就需要知道第n-2個和第n-3個斐波那契數,第n-2個斐波那契數就需要知道第n-3和第n-4個斐波那契數......這樣的話,可以用遞迴來實現:
#include using namespace std;long long fib(size_t n)int main() long long ret = p[n]; delete p;//記得釋放空間,否則會有記憶體洩露 return ret;}
執行上面的程式,會發現無論n為多大結果很快就能夠得出來,這樣的執行效率是比遞迴壓棧要高的多的;
可是,上面的程式還是存在問題,因為如果n的值比較大的話,開闢的空間也會很大,但是我們會發現,要求第n個斐波那契數,只需要知道它前面的兩個數然後相加起來就可以了,也就是說,明明只需要三個資料的空間用來存放資料就好了卻要開闢出很大的一塊空間來將n前面所有的資料都給存放起來,因此,上面的程式雖然比遞迴壓棧效率要高,但是卻比較浪費儲存空間;上面的**還是可以優化為如下的:
long long fib(size_t n) return f2; }
《完》本文出自 「敲完**好睡覺zzz」 部落格,請務必保留此出處
求斐波那契數列第n項的值
斐波那契數列的描述 斐波那契數列的描述 斐波那契數列,又稱 分割數列,指的是這樣的乙個數列 0 1 1 2 3 5 8 13 21 在數學上,斐波那契數列定義如下 f 0 0,f 1 1,f n f n 1 f n 2 n 2,n n 即這個數列從第二項開始,每一項都等於前兩項之和。特別指出 0是第...
斐波那契數列求第n項的值
求斐波那契數列第n項的值 方法一 遞迴 數列的第n項 除第1項和第2項 是第n 1項與第n 2項的和。數列滿足遞迴的關係,故可用遞迴演算法求第n項的值。用遞迴求解,最重要的事是確定結束條件,給演算法乙個出口。本題中結束遞迴的條件為 n等於1或n等於2。演算法如下 int fibonacci 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...