斐波那契数列

1:题目描述

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

F(0) = 0,   F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.
斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。

答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。

 

示例 1:

输入:n = 2
输出:1
示例 2:

输入:n = 5
输出:5

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/fei-bo-na-qi-shu-lie-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2:题目分析

2.1:递归法

这种题目很容易使用递归法来解决,但是带来的问题就是递归处每一个数据都是用F(1)和F(0)组合而来,而再计算过程中,不保存这些中间变量,所以导致大量的重复计算过程。

2.2:DP法

正是由于上面递归法的过程带来的问题,我们尝试保存一些中间变量,并且改变我们解决问题的顺序,再递归中我们是每次冲顶往根的寻找数据,所以会造成大量的重复计算。然后如果我们每次从根部开始向顶部计算,则每次结果都保存下来,则再新的需求是,直接再对应位置提出出来即可。代码如下

3:解决代码

class Solution {
    public int fib(int n) {
        int[] arr = new int[n+2];
        arr[0] = 0;
        arr[1] = 1;
        for(int i=2;i<=n;i++){
            arr[i] = (arr[i-1]+arr[i-2])%1000000007;
        }
        return arr[n];
    }
}

 

posted @ 2020-03-05 20:57  大朱123  阅读(456)  评论(0)    收藏  举报