写一个函数,输入 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。
- 示例 1:输入:n = 2输出:1
- 示例 2:输入:n = 5输出:5
方法一:动态规划
思路分析:
斐波那契数的边界条件是 F(0)=0F(0)=0 和 F(1)=1F(1)=1。当 n>1n>1 时,每一项的和都等于前两项的和,因此有如下递推关系:
- F(n)=F(n-1)+F(n-2)
- F(n)=F(n−1)+F(n−2)
如图:
int fib(int n){
int mod=1000000007;
int front=0;
int mid=0;
int rear=1;
if(n<2)
{
return n;
}
for(int j=2;j<=n;j++)
{
front=mid;
mid=rear;
rear=(front+mid)%mod;
}
return rear;
}
复杂度分析:
- 时间复杂度:O(n)O(n)。
- 空间复杂度:O(1)O(1)。