蓝桥杯练习题--Fibonacci数列

Fibonacci数列

蓝桥杯练习题--Fibonacci数列_第1张图片

方法一(也是我第一个想到的办法 但是花费时间太多了)递归

#include
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
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;
}

我菜得伤心,睡不着觉继续整整吧

你可能感兴趣的:(蓝桥杯练习题)