劍指offer-斐波那契數列(C++)

1、最簡單,容易理解的方法
斐波那契數列的標準公式爲:

F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)
class Solution {
public:
    int Fibonacci(int n) {
        if (n <= 1)
            return n;
        return Fibonacci(n-1) + Fibonacci(n-2);
    }
};

複雜度

時間複雜度:O(2^n)O(2n)
空間複雜度:O(1)O(1)

2、優化方法
定義兩個變量,pre1代表f(n-2),pre2代表f(n-1);

class Solution {
public:
    int Fibonacci(int n) {
        if (n == 0)
            return 0;
        if (n == 1)
            return 1;
        int pre1 = 0, pre2 = 1 ;
        int result;
        for(int i = 2; i <= n ; i++)
        {
            result = pre2 + pre1;
            pre1 = pre2;
            pre2 = result;
        }
        return result;
    }
};

複雜度

時間複雜度:O(n)O(n)
空間複雜度:O(1)O(1)

3、進一步優化

class Solution {
public:
    int Fibonacci(int n) {
        if (n == 0)
            return 0;
        if (n == 1)
            return 1;
        int temp = 0, result = 1 ;
        for(int i = 2; i <= n ; i++)
        {
            result = temp + result;
            temp = result - temp;
        }
        return result;
    }
};

複雜度

時間複雜度:O(n)O(n)
空間複雜度:O(1)O(1)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章