提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个 n 级的台阶总共有多少种跳法(先后次序不同算不同的结果)。在此问题上,本文采用了较为常见的两种方法。
`
方法一(写出赋值方法并理解核心问题。)
代码如下(示例):
#include<stdio.h>
int main()
{
int a1=1,a2=2;
int n,sum=0;
scanf("%d",&n);
if(n==1)
{
printf("1");
}
else if(n==2)
{
printf("2");
}
else
{
int i;
for(i=3;i<=n;i++)
{
sum=a1+a2;
a1=a2;
a2=sum;
}
printf("%d",sum);
}
return 0;
}
根据前面几次台阶跳法可以知道,一个台阶跳法有1种,两个台阶跳法有2种,三个台阶跳法有3种,四个台阶跳法有5种,五个台阶跳法有8种,六个台阶跳法有13种.从中我们可以看出。当次数不小于三种的时候,下一次的台阶跳法是前两个台阶跳法之和。
for(i=3;i<=n;i++)
{
sum=a1+a2;
a1=a2;
a2=sum;
将初始化的a1和a2的值首先赋给sum,然后再a2的值赋给a1,sum的值赋给a2,再进行循环,逐级赋给。就得到问题答案。
方法二(递归做法)
#include<stdio.h>
int digui(int n)
{
if(n==1||n==2)
{
return n;
}
else
{
return digui(n-1)+digui(n-2);
}
}
int main()
{
int n;
scanf("%d",&n);
int t=digui(n);
printf("%d\n",t);
return 0;
}
if(n==1||n==2)
{
return n;
}
else
{
return digui(n-1)+digui(n-2);
}