方案一:用递归实现(用递归可以将问题分解成规模更小的问题)
#include <stdio.h>
int fun(int m)
{
if(m==0)
return 1;
if(m==1)
return 1;
return fun(m-1)+fun(m-2);
}
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
int m;
scanf("%d",&m);
if(m==1)
printf("0\n");
else
printf("%d\n",fun(m-1));
}
return 0;
}
int fun(int m)
{
if(m==0)
return 1;
if(m==1)
return 1;
return fun(m-1)+fun(m-2);
}
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
int m;
scanf("%d",&m);
if(m==1)
printf("0\n");
else
printf("%d\n",fun(m-1));
}
return 0;
}
上面这种方案会超时
方案二 斐波那契数列
当m=1时,要特别分出,其他就是斐波那契数列
#include <stdio.h>
int main()
{
int i,n;int a[41];
a[1]=0,a[2]=1;a[3]=2;
for(i=4;i<41;i++)
a[i]=a[i-1]+a[i-2];
scanf("%d",&n);
while(n--)
{
int m;
scanf("%d",&m);
if(m==1)
printf("0\n");
else
printf("%d\n",a[m]);
}
return 0;
}