题目描述:
写一个函数,输入 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