10 01 斐波那契數列

2022-08-18 01:42:13 字數 1864 閱讀 2479

題目描述:

大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0)。n<=39

測試用例:

1) 功能測試(3、5、10)

2) 邊界值測試(0、1、2)

3) 效能測試(較大的數字:40、50、100)

4) 錯誤輸入:負值(-1、-2)

解題思路與**:

1) 根據公式,簡單使用遞迴實現。 缺點:效率低下,n只能取較小的值

有兩端特殊的區間:<0部分,0與1返回其本身,>1遞迴呼叫

class solution else

return res;

}};  //

//在牛課上執行,顯示:執行超時:您的程式未能在規定時間內執行結束,請檢查是否迴圈有錯或演算法複雜度過大。case通過率為0.00%

//對上述時間超出要求的**進行改進

class solution else

//return res;

}}; //687ms

//f2=1;直接給出結果,而不是通過f2=f1+f0計算即可滿足時間要求

//使用遞迴方法

class solution

};//f0=0; f1=1; f2=1; f3=2;

//f4=f3+f2=2*f2+f1=3*f1+2*f0

//f5=f4+f3=2*f3+f2=3*f2+2*f1

//每次遞迴比普通的遞迴少了幾次重複值的計算,對於n偏大時仍然效率低

注意:該方法的時間複雜度是以n的指數方式遞增的

2)從下往上,利用已經求解過的值計算

如 f8=f7+f6; 當計算f9時利用上一步的計算結果(f8)加上f7(相加較大的內個值)

class solution 

return fibres;}};

3)動態規劃,本質上同方法2一致,只是**更簡潔

class solution 

return f;

//為什麼返回的是f而不是g。

//寫幾個n觀察,其中g表示f(n+1), f表示f(n)

}};//上述方法沒有考慮輸入為負值的時候,當n為負值時,while的條件判斷為true,--後仍然為負值,會形成無限迴圈。

class solution

return f;

//為什麼返回的是f而不是g。

//寫幾個n觀察,其中g表示f(n+1), f表示f(n)

}};或者 修改 while(n-- > 0)

4)簡單的動態規劃,以一定的空間代價避免代價更大的重複計算的棧空間浪費

class solution 

//int record = new int[n+1];

int *record = new int[n+1]; //占用一定的空間

record[0] = 0;

record[1] = 1;

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

return record[n];}};

空間浪費了sizeof(int)*(n-1),時間複雜度也達到了o(n)。 

5) 矩陣的快速冪(p76)  

基礎知識:

斐波那契數列 斐波那契數列python實現

斐波那契數列 fibonacci sequence 又稱 分割數列 因數學家列昂納多 斐波那契 leonardoda fibonacci 以兔子繁殖為例子而引入,故又稱為 兔子數列 指的是這樣乙個數列 1 1 2 3 5 8 13 21 34 在數學上,斐波納契數列以如下被以遞推的方法定義 f 1 ...

迴圈斐波那契數列 斐波那契數列應用

什麼是斐波那契數列 斐波那契數列指的是這樣乙個數列 1,1,2,3,5,8,13,21,34,55,89,144 這個數列從第3項開始,每一項都等於前兩項之和 台階問題 有一段樓梯有10級台階,規定每一步只能跨一級或兩級,要登上第10級台階有幾種不同的走法?這就是乙個斐波那契數列 登上第一級台階有一...

斐波那契數列

1 題目描述 大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項。斐波那契數列的定義如下 輸入 輸入可能包含多個測試樣例,對於每個測試案例,輸入包括乙個整數n 1 n 70 輸出 對應每個測試案例,輸出第n項斐波那契數列的值。2 這是九度上的乙個題,要求時間限制1秒,整數的...