題目描述:
大家都知道斐波那契數列,現在要求輸入乙個整數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 elsereturn res;
}}; //
//在牛課上執行,顯示:執行超時:您的程式未能在規定時間內執行結束,請檢查是否迴圈有錯或演算法複雜度過大。case通過率為0.00%
//對上述時間超出要求的**進行改進class solution else
//return res;
}}; //687ms
//f2=1;直接給出結果,而不是通過f2=f1+f0計算即可滿足時間要求
//使用遞迴方法注意:該方法的時間複雜度是以n的指數方式遞增的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偏大時仍然效率低
2)從下往上,利用已經求解過的值計算
如 f8=f7+f6; 當計算f9時利用上一步的計算結果(f8)加上f7(相加較大的內個值)
class solution3)動態規劃,本質上同方法2一致,只是**更簡潔return fibres;}};
class solution4)簡單的動態規劃,以一定的空間代價避免代價更大的重複計算的棧空間浪費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)
class solution空間浪費了sizeof(int)*(n-1),時間複雜度也達到了o(n)。//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];}};
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秒,整數的...