面试题10- I. 斐波那契数列

题目描述:

写一个函数,输入 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

提示:

0 <= n <= 100

Java解法(递归):

class Solution {
    public int fib(int n) {
        if(n == 0) return 0;
        if(n == 1) return 1;
        return fib(n - 1) + fib(n-2);
    }
}

可以分析fib(10)的求解过程,如果想获得fib(10),必须先计算出fib(9)和fib(8),同理,得到fib(9),需要先计算fib(8)和fib(7)的值,我们可以使用树形结构来表示这种依赖关系。不难发现,树中很多节点是重复的,重复的节点数会随着n的增大,急剧增加,这样计算的时间复杂度会以n的指数方式增长。
Java解法(循环):

class Solution {
    public int fib(int n) {
        if(n == 0) return 0;
        if(n == 1) return 1;
        int fib1 = 1;
        int fib2 = 0;
        int fibn = 0;
        for (int i = 2; i <= n; i++)
        {
            fibn =(fib1 + fib2) % 1000000007;
            fib2 = fib1;
            fib1 = fibn;
        }
        return fibn;
    }
}

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/fei-bo-na-qi-shu-lie-lcof

你可能感兴趣的:(面试题10- I. 斐波那契数列)