Fibonacci数列
方法一(也是我第一个想到的办法 但是花费时间太多了)递归
#include<iostream>
using namespace std;
int f(int x)
{ if(x==1)
return 1;
else if(x==2)
return 1;
else
return f(x-1)+f(x-2);
}
int main()
{
int n;
cin>>n;
if(n<10007)
cout<<n;
else
{
cout<<f(n)%10007;
}
return 0;
}
方法二–不求具体F[n],直接求余数
用数组来从i=3开始往后向F[n]算,中间也用数组来存/10007的余数,然后将余数存进数组继续运算。
这里有个我的想法误区,以为只能从f[n]往前算,实际不是的。
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int a[n];
a[0]=0;
a[1]=a[2]=1;
if (n>2)
{
for(int i=3;i<=n;i++)
{
a[i]=(a[i-1]+a[i-2])%10007;
}
}
cout<<a[n];
return 0;
}
我菜得伤心,睡不着觉继续整整吧