演算法學習記錄六(C++)--->獲取斐波那契數列第n項
描述
- 大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項。
n<=39
分析
這東西第一眼想到的就是遞迴,但是遞迴就會有問題,請看;
f(n) = f(n-1) + f(n-2)
隨便弄個簡單的數字,其實你拆開來就會這樣
Fibonacci(4) = Fibonacci(3) + Fibonacci(2);
= Fibonacci(2) + Fibonacci(1) + Fibonacci(1) + Fibonacci(0);
= Fibonacci(1) + Fibonacci(0) + Fibonacci(1) + Fibonacci(1) + Fibonacci(0);
很明顯,重複計算了
int Fibonacci(int n)
{
if(n <= 1)
{
return n;
}
else
{
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
}
而且這種n一大,直接棧溢位
解法一
class Solution {
public:
int Fibonacci(int n) {
// 非常容易理解,0,1,2的時候單獨處理
if(n <= 0){
return 0;
}
if(n == 1 || n ==2){
return 1;
}
int a = 1;
int b = 1;
int result;
// 然後處理的時候獲取到A+B的結果,然後把B賦值給A,結果賦值給B,一步步忘後面移動
for(int i = 3;i<=n;i++){
result = a + b;
a = b;
b = result;
}
return result;
}
};
解法二
class Solution {
public:
// 動態規劃版本 總之核心就是先獲取兩者相加的結果,然後再把結果減去A值,得到B值
int Fibonacci(int n) {
int i = 0;
int j = 1;
while(n--){
j += i;
i = j - i;
}
return i;
}
};
相關文章
- 斐波那契數列的第N項(1≤n≤10^18 矩陣快速冪)矩陣
- 斐波那契數列
- 斐波那契數列演算法演算法
- 演算法(1)斐波那契數列演算法
- 斐波那契數列(Java)Java
- 演算法一:斐波那契阿數列演算法
- 大數斐波那契數列的演算法演算法
- Java斐波那契數列的第n項(從0開始,第0項為0,第1項是1)。Java
- 斐波那契數列 (C#)C#
- PHP 與斐波那契數列PHP
- 斐波那契數列詳解
- 演算法導論學習之補漏:斐波那契數列演算法
- 斐波那契數
- 1064. 計算斐波那契第n項 通項公式公式
- LeetCode 1137第N個斐波那契數LeetCode
- 計算斐波那契數列的演算法演算法
- 斐波那契數列演算法 JS 實現演算法JS
- js實現斐波那契數列JS
- 斐波那契數列js 實現JS
- 斐波那契數列Ⅳ【矩陣乘法】矩陣
- 菲波那契數——根據輸入資料中的n,輸出第n項菲波那契數
- 斐波那契數(C/C++,Scheme)C++Scheme
- Java語言非遞迴求第n個斐波那契數Java遞迴
- 斐波那契數列的通項公式及證明公式
- js計算斐波那契數列程式碼例項JS
- 面試題9-斐波那契數列面試題
- [C103] 斐波那契數列
- 博弈學習 (二) 斐波那契博弈
- fibonacci斐波那契數列詳解 遞迴求Fn非遞迴求Fn求n最近的斐波那契數遞迴
- 斐波那契數列 多語言實現 筆記筆記
- “斐波那契數列”問題的遞推演算法演算法
- 使用Python實現斐波那契數列Python
- JavaScript 實現:輸出斐波那契數列JavaScript
- js迭代器實現斐波那契數列JS
- 斐波那契數列的分治法計算
- 斐波那契數列的python實現Python
- 【演算法詳解】斐波那契數列 - Fibonacci sequence演算法
- Leedcode-斐波那契數