一、题目:青蛙一次可以跳1个台阶或2个台阶,当台阶数为n时,共有几种跳法?
二、求解:
当台阶数为1时,有1种跳法;当台阶数为2时,有2种跳法;当台阶数为3时,有3种跳法;当台阶数为4时,有5种跳法;当台阶数为5时,有8种跳法…… 那么这其中有什么规律呢?分析当台阶数为n的情况,青蛙可以选择先跳上一个台阶,剩下的就是当台阶数为n-1时的情况;青蛙也可以选择先跳上2个台阶,那么剩下的就是台阶数为n-2时的情况。因此,假设f(n)为台阶数为n时的跳法数,那么f(n)=f(n-1)+f(n-2),其实就是斐波那契数列去掉第一个数的结果。所以,可以用递归的方法解决这个问题。代码如下:
#include <stdio.h>
int jumpf(unsigned int x)
{
if(x==2 || x==1)
{
return x;
}
else if(x>2)
{
return jumpf(x-1)+jumpf(x-2);
}
}
int main()
{
unsigned int step=0;
printf("请输入台阶数:");
scanf("%d",&step);
printf("有%d种跳法\n",jumpf(step));
return 0;
}
但是,用递归的方法会产生过多的重复计算,当台阶数较大时,计算效率很低。因此,采用循环的方法求解更好。代码如下:
#include <stdio.h>
int jumpf(unsigned int x)
{
int a=1;
int b=2;
int c=0;
if(x==2)
return 2;
else if(x==1)
return 1;
else
while(x>2)
{
c=a+b;
a=b;
b=c;
x--;
}
return c;
}
int main()
{
unsigned int step=0;
printf("请输入台阶数:");
scanf("%d",&step);
printf("有%d种跳法\n",jumpf(step));
return 0;
}
三、结果
结果正确。(注意:不管是用哪种方法,台阶数都不要过大,否则可能会造成溢出,得到错误结果。)