上篇文章我们讲述递归时,留下了两个小问题让大家自行去解决,这篇文章我来和大家好好解析解析这其中一道题目,青蛙跳台阶!🍀🍀🍀
青蛙跳台阶是指什么?
首先我们要知道这个问题是怎样的,这个描述的是,一只青蛙去跳台阶,它一次性可以跳一阶台阶,也可以跳两阶台阶,在这种情况下,出现这样一个问题,如果有一个台阶的话,那么青蛙只能跳一次,只有一种跳法;如果有两阶台阶,那么青蛙可以有两种跳法;如果有n个台阶,那么青蛙有多少种跳法去跳这n个台阶?
![](https://i-blog.csdnimg.cn/blog_migrate/672da0c1435122e6f4ec316b4d694352.png)
我们用图可能更加直观一些。
思路分析:
有以上讲解之后,我们接下来来分析我们该如何用代码去实现这个问题!🌟🌟🌟
我们在讲解这个问题的时候讲解了,当青蛙跳1个台阶时(n=1),它只有一种跳法;
当青蛙跳2个台阶时(n=2),它有两种跳法,青蛙可以一阶一阶的跳;也可以一次性跳两阶;
当青蛙跳3个台阶时(n=3),它有三种跳法,青蛙可以先跳一阶,剩下两阶,就是两阶的跳法(有两种);青蛙可以先跳两阶,剩下的就是一阶的跳法(有一种);
当青蛙跳4个台阶时(n=4),它有五种跳法,青蛙可以先跳一阶,剩下的就是三阶的跳法(有三种);青蛙可以先跳两阶,剩下的就是两阶的跳法(有两种);
当青蛙需要跳n个台阶时,这个时候有多少种跳法呢?从上面我们可以分析出来,当n=3时,它的跳法有(n=2)+(n=1);当n=4时,它的跳法有(n=3)+ (n=2);所以我们不难看出这其中的规律,所以当n个台阶时,那么它的跳法有(n-1)+(n-2)种;
![](https://i-blog.csdnimg.cn/blog_migrate/3a8dd0a1b8bd9fdefc8e891642a76ada.png)
思路我们分析出来了,接下来我们用代码去将其实现:
递归代码实现:
#include<stdio.h>
//青蛙跳台阶
int jump_steps(int n)
{
if (n == 1 || n == 2)
{
return n;
}
else
return jump_steps(n - 1) + jump_steps(n - 2);
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = jump_steps(n);
printf("%d\n", ret);
return 0;
}
运行结果:
![](https://i-blog.csdnimg.cn/blog_migrate/64c9e8b1f9d13c9d062a2b62c5105d26.png)
代码实现完了,不知道大家有没有一种发现,就是这题和我们之前讲述递归的时候所讲述的斐波那契数的方法是不是有点类似的感觉,其实这两题的思路时非常相似的,所以在之前我讲解递归的时候也给大家提示了一下,可以参考斐波那契数进行实现,像这种题,我认为使用递归是最为简便的,思路也是最为清晰的!😁😁😁
![](https://i-blog.csdnimg.cn/blog_migrate/e9b0661c3ed85fe58d4c806d36091b71.gif)
小火车继续前行~~~~~~~
大佬们点点关注和赞嘿嘿😁😁