0
点赞
收藏
分享

微信扫一扫

20. (★★动态规划)剑指 Offer 10- I. 斐波那契数列

言诗把酒 2022-02-25 阅读 33

题目描述:

写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:

F(0) = 0,   F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.

答案需取模

思路:

1)递归:由于重复的计算 之前的 数,造成时间复杂度很大;超出时间限制!递归法的时间复杂度为 O(2^N)

2)动态规划:就是动态改变下一次要用到的内容的值!?

韩顺平讲过,但是不记得了,学过的尚硅谷数据结构与算法 需要重新复习一下,基础知识需要学习!

手写代码:递归,直接错误

class Solution {
    public int fib(int n) {
        return fibo(n);
    }
    //使用递归的方法
    int fibo(int n){
        //结束条件
        if(n == 1 || n == 0) return n;
        //具体的逻辑主体
        return fibo(n - 1) + fibo(n - 2);
    }
}

动态规划:感觉是和 递归相反的情况!递归往前计算了好多次!时间复杂度 O(N)

class Solution {
    public int fib(int n) {
        //b在前,a在后,每次把b往前移动一位!
        int a = 0,b = 1,sum = 0; //a代表 n = 0; b代表 n=1
        for(int i = 0;i < n;i++){
            sum = (a + b) % 1000000007;//得到的是 n = 2时的值
            //动态的更换 a 和 b的值
            //sum、a、b、是一直挨着的三个
            a = b;
            b = sum;
        }
        //a才是记录当前 n的数值;b已经是记录下一个数值
        return a;
    }
}
举报

相关推荐

0 条评论