题解 | #斐波那契数列#

斐波那契数列

https://www.nowcoder.com/practice/c6c7742f5ba7442aada113136ddea0c3

方法一:递归

斐波那契数列:f(n) = f(n-1) + f(n+1) (n>2)。可以将问题分解,使用递归解答。

时间复杂度:o(2n)。

空间复杂度:o(n)。递归栈深度

class Solution {
public:
    int Fibonacci(int n) {
        if(n == 1 || n == 2) 
            return 1;
        
        return Fibonacci(n - 1) + Fibonacci(n - 2);
    }
};

方法二:递归

上述递归会有很多重复的计算,可以利用一个数组将数列保存下来,这样可以避免递归过程的重复计算。

时间复杂度:o(n)。

空间复杂度:o(n)。递归栈深度

class Solution {
  public:
    int fn[50] = {0};
    int Fibonacci(int n) {
        if (n == 1 || n == 2)
            return 1;
        if (fn[n] > 0)
            return fn[n];

        fn[n] = Fibonacci(n - 1) + Fibonacci(n - 2);
        return fn[n];
    }
};  

方法三:动态规划

直接从最小的序列开始计算,直到得到想要序列。

时间复杂度:o(n)。

空间复杂度:o(1)。

class Solution {
  public:
    int Fibonacci(int n) {
        if (n == 1 || n == 2)
            return 1;

        int temp1 = 1;
        int temp2 = 1;
        int res;
        for (int i = 2; i < n; i++) {
            res = temp1 + temp2;
            temp1 = temp2;
            temp2 = res;
        }
        return res;
    }
};

刷题题解(c++) 文章被收录于专栏

算法题题解(c++)

全部评论

相关推荐

03-18 09:45
莆田学院 golang
牛客749342647号:佬,你这个简历模板是哪个,好好看
点赞 评论 收藏
分享
03-21 11:31
已编辑
门头沟学院 后端
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务