题目描述
写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:
F(0) = 0, F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.
斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。
答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/fei-bo-na-qi-shu-lie-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
理清思路
解题方法比较简单,F(N) = F(N - 1) + F(N - 2) ,可以用数组和递归两种方式实现,但递归方法会重复计算某些值,导致测试超时,为避免递归超时,可以用另一个数组来保存计算过的值,最终还是用到了数组,不如直接采用数组方式比较简单。结果记得取模运算,防止结果溢出。
代码实现
- 数组
int fib(int n){
int f[n + 1];
int i = 2;
if( n == 0 || n == 1)
{
return n;
}
f[0] = 0;
f[1] = 1;
for(i; i <= n; i++)
{
f[i] = (f[i-1] + f[i-2])%1000000007;
}
return f[i-1];
}