关于这道题,可以使用难兄难弟————递推和递归,不过千万注意递归掌握不起来很容易超时
如果使用递推,那么根据斐波那契数列的定义我们可以算出递推公式 a[i]=a[i-1]+a[i-2]
并且递推边界是斐波那契数列的一,二项是1。附上代码(递推)
#include<iostream>
using namespace std;
int a[1000007];
int main()
{
int n;
int c;
cin>>n;
a[1]=1;
a[2]=1;
for(int i=1;i<=n;i++)
{
cin>>c;
for(int j=3;j<=c;j++)
{
a[j]=a[j-1]+a[j-2];
}
cout<<a[c]<<endl;
}
return 0;
}
(大家可以自行复制)
再考虑递归 递归的公式是 n=a(n-1)+a(n-2)
当n=1或n=2时 结果为1。AC代码奉上
#include<iostream>
using namespace std;
int a(int b )
{
if(b==1) return 1;
if(b==2) return 1;
if(b>=3) return a(b-1)+a(b-2);
}
int main()
{
int n;
cin>>n;
int c;
for(int i=1;i<=n;i++)
{
cin>>c;
cout<<a(c)<<endl;
}
return 0;
}
如果AC不掉,请评论区见~~