面試題9 斐波那契數列

2021-07-28 08:25:12 字數 792 閱讀 2256

如果我們需要多次計算相同的問題,通常可以選擇使用遞迴或者迴圈兩種不同的方法。遞迴是在乙個函式的內部呼叫這個函式自身。而迴圈則是通過設定計算的初始值及終止條件,在乙個範圍內重複運算。

題目1:寫乙個函式,輸入n,求斐波那契數列的第n項。

斐波那契數列的定義如下:

f(n)=0,n=0;

f(n)=1,n=1;

f(n)=f(n-1)+f(n-2),n>1

效率很低的解法:

long

long fibonacci(unsigned

int n)

上述的遞迴解法有很嚴重的效率問題。用遞迴的方法計算的時間複雜度是以n的指數的方式遞增的。

上述的遞迴**之所以慢是因為重複的計算太多,所以需要想辦法避免重複計算就可以了。eg:可以把已經得到的數列中間項儲存起來,如果下次需要計算的時候先查詢一下,如果前面已經計算過就不用再重複計算了。

實用解法:

long

long fibonacci(unsigned n)

; if(n<2)

return result[n];

long

long fibnminusone=1;

long

long fibnminustwo=0;

long

long fibn=0;

for(unsigned

int i=2;i<=n;++i)

return fibn;

}

面試題9 斐波那契數列

方法一 很容易想到的解法是直接使用遞迴。c include stdafx.h include using namespace std long long fibonacci unsigned int n if n 1 return fibonacci n 1 fibonacci n 2 int tm...

面試題9 斐波那契數列

題目一 寫乙個函式,輸入n,求斐波那契數列的第n項,斐波那契數列的定義如下 0 n 0 f n 1 n 1 f n 1 f n 2 n 1 遞迴 long long fibonacci unsigned int n if n 0 n 1 return n return fibonacci n 1 f...

面試題9 斐波那契數列

面試題9 題目 寫乙個函式,輸入n,求斐波那契數列的第n項。很多教科書中的解法 long long fibonacci solution1 unsigned int n 這是從第n項向前計算的方法,很多計算量實際上是重複的。long long fibonacci solution2 unsigned...