嘿嘿嘿,错了好多遍终于找到了错误原因
看下面:
你猜猜错在哪里哟。
#include<cstdio>
int n,m,a[25]={0,1,1};
int wht(int n){
if(a[n]!=0) return a[n];
else a[n]=wht(n-2)+wht(n-1);
return a[n];
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&m);
printf("%d",wht(m));
}
}
比较一下,发现了什么:
#include<cstdio>
int n,m,a[25]={0,1,1};
int wht(int n){
if(a[n]!=0) return a[n];
else a[n]=wht(n-2)+wht(n-1);
return a[n];
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&m);
printf("%d\n",wht(m));
}
}
就是
少!了!一!个!空!格!!!!!!!!
呜呜呜呜·。
B~~~~~~U~~~~~~~~T
最后还是发现了。
巧合的是,这2.2里的题都是错在这个地方。所以,一点点小细节也可以决定一切。记住咯。
等等!!!!!!!!!!!
我好像忘了说方法!
哦,这是我第一次用递归做题,所以选了这个比较基础的。
首先需要找到他们之间的关系,Fn=F(n-1)+F(n-2);F1=1;F2=2
然后继续推:F(n-1)==F(n-2)+F(n-3);
然后就做出来了。
不懂再好好看看代码。
还有一种方法,比较递推:
#include<iostream>
using namespace std;
int a,n;
int b[1000000];
int main()
{
int k=0;
cin>>n;
while(n-k!=0){
cin>>a;
b[1]=1;
b[2]=1;
for(int i=3;i<=a;i++){
b[i]=b[i-1]+b[i-2];
}
cout<<b[a]<<endl;
k++;
}
}
这个也是一样的。
看看代码应该就懂了.