剑指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)
原创文章 62 获赞 133 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43142797/article/details/104928417