斐波那数列
1、递归
做题的时候出现了超时的情况
class Solution {
public:
int fib(int n) {
int MOD=1000000007;
int a;
if(n==1 || n==2){
return 1;
}else if(n<0){
return 0;
}
else{
return (fib(n-1)+fib(n-2))%int(1e9+7);
}
}
};
这里就是通过不断递归,然后计算两项的值,但是由于会有很多重复的运算,会导致在运算基数比较大的情况下,会使花费的时间比较多,比如上面我就直接超时了。
2、迭代
由于我使用递归直接超时,所以我准备换一种办法,1前面的关于基本值当数字为0,1,2以下的时候判断是一样的,到后面我准备使用迭代。
主要就是不停的a1,a2,a3交换并且将值不停的叠加,达到计算出最后的和,也就是要的得到的斐波那数列的第N项的值。
class Solution {
public:
int fib(int n) {
int MOD=1000000007;
int a;
if(n==1 || n==2){
return 1;
}if(n<=0){
return 0;
}
else{
int a1=0,a2=0,a3=1;
for(int i=2;i<=n;i++){
a1=a2;
a2=a3;
a3=(a1+a2)%MOD;
}
return a3;
}
}
};
服了我自己,哈哈哈哈没打括号,导致一直结果错误,C++也忘记的差不多了,
通过了!!!