您的位置:首页 > 其它

超级台阶(nyoj 76)

2018-02-05 10:57 197 查看


本题输出数据是有规律的,其实就是斐波那契数列的变形,但是可以换一种思路,采用递归思想来解决这个问题,不过实践证明递归效率不高,会超时,但是这并不影响对递归的学习。

一. 采用递归思想,会超时

思路:和用递归求组合数类似,设置递归出口,每次递归都解决一步,然后交给下一次递归,直至到达出口。

代码如下:

#include<stdio.h>
int fun(int m);
int main(void)
{
int n,m;
scanf("%d",&n);
while(n--)
{
scanf("%d",&m);
printf("%d\n",fun(m));
}
return 0;
}
int fun(int m)
{
if(m==0)
{
return 0;
}
if(m==1)
{
return 1;
}
return fun(m-1)+fun(m-2);
}


二.根据规律,把每种情况的答案都存入数组,根据输入数据,直接调出答案

代码如下:

#include<stdio.h>
int main(void)
{
int n,m,i;
int a[41]={0,0,1,2};
for(i=4;i<41;i++)
{
a[i]=a[i-1]+a[i-2];
}
scanf("%d",&n);
while(n--)
{
scanf("%d",&m);
printf("%d\n",a[m]);
}
return 0;
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: