题意:
给出 n n n,求出斐波那契数列第n项,值取余 1 e 9 + 7 1e9+7 1e9+7
思路:
斐波那契数列递推公式为:
f
[
0
]
=
0
,
f
[
1
]
=
1
f[0]=0,f[1]=1
f[0]=0,f[1]=1
f
[
n
]
=
f
[
n
−
1
]
+
f
[
n
−
2
]
(
n
>
2
)
f[n]=f[n-1]+f[n-2] (n>2)
f[n]=f[n−1]+f[n−2](n>2)
特判
n
<
=
1
n<=1
n<=1的情况
对于其他情况,for循环求就可以。
假设
c
c
c就是答案,
a
a
a是前两项,
b
b
b是前一项。
每次先求出
c
=
a
+
b
c=a+b
c=a+b,然后让
a
=
b
,
b
=
c
a=b,b=c
a=b,b=c。这样在下一次循环里,
a
,
b
a,b
a,b就是前两项的值了。
代码:
class Solution {
public:
int mod=1000000007;
int fib(int n) {
int a=0,b=1,c=0;
if(n==0) return 0;
if(n==1) return 1;
for(int i=2;i<=n;i++){
c=(a+b)%mod;
a=b;b=c;
}
return c;
}
};