目录
一只青蛙要跳上一定数量的台阶,但其一次只能跳一阶或两阶,求这只青蛙跳上N上台阶有多少种跳法?
二 分析问题
因为青蛙每次只能跳一个台阶或两个台阶,因此可先对两种比较简单的情况分析:
跳一个台阶只有一种跳法 跳一下。
跳两个台阶有两种跳法 一下一下跳 或者 一下跳两个。
那么跳N个台阶有多少种跳法呢???
第N个台阶的方法个数是N的前两个数的和,这个题和求第N个斐波那契数列思路一样的。
公式为:f(N-2)+(N-1)。
递归代码如下:
#include<stdio.h>
int frog_step(int N)
{
if (N <= 2)
return N;
else
return frog_step(n - 1) + frog_step(n - 2);
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = frog_step(N);
printf("%d", ret);
return 0;
}
但是用递归的方式一旦N的值比较大,就会做很多重复的运算,所以说在这个地方用递归的方式来写这个代码不太合适,改进如下:
#define _CRT_SECURE_NO_WARNINGS 1 //vs2019为使用scanf函数所用。
#include <stdio.h>
int f(int n)
{
int a = 1;
int b = 2;
int c = 0;
while(n > 2)//如果N的数大于2一直循环
{
if (n == 1)//当只跳一个台阶时只有一种跳法
{
return 1;
}
if (n == 2)//2种台阶两种跳法
{
return 2;
}
c = a + b;不断的相加直到N小于2
a = b;
b = c;
n--;//防止死循环
}
return c;//几种跳法
}
int main()
{
printf("青蛙要跳几个台阶=>");
int n = 0;
scanf("%d", &n);
printf("青蛙会有几种跳法=>");
printf("%d", f(n));
}
三 总结
其实青蛙跳台阶这个问题就是斐波那契额数列换了个问法,和斐波那契数列的思路是一样的,搞懂一个一通百通,只需要改动几个地方就可以了。所以说还是很容易的,小伙伴们学会了吗???