【C语言】手把手带你解决青蛙跳台阶问题

简介: 【C语言】手把手带你解决青蛙跳台阶问题

青蛙跳台阶问题的详细描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个n级的台阶总共有多上种跳法。


具体解决青蛙跳台阶问题

青蛙跳台阶问题解题思路分析

当N=1时,那么青蛙就只有一种跳法。

5cb891e92d914069a49e8d233d84f40a.png


当N=2时,青蛙可以跳两次一层台阶也可以跳一次二层台阶,有两种跳法。

aac408b2eb494d83ae099690a585eecc.png


当N=3时,青蛙可以先跳一次一层台阶,那么还需要跳两层台阶,那它此时就是N=2时的跳法,有两种跳法。


当青蛙跳一次二层台阶时,此时只需要跳一层台阶,那么它就是N=1时的跳法。


此时它的跳法就等于(N=1)+(N=2)种跳法。

429e4fb302274bcab91c8bf959d07506.png


当N=4时,青蛙跳一次一层台阶时,还需要跳三层台阶,那它此时剩下的跳法就等于N=3时的跳法,即有三种跳法。


青蛙跳一次二层台阶时,还剩二层台阶需要跳,那它此时剩下的跳法就是N=2时的跳法,则有两种跳法。


那么此时它的跳法就等于(N=2)+(N=3)种跳法。

2ebe3b7aad364e4e938e0493be6ef0aa.png


思路总结

那么,不难看出青蛙跳台阶的规律,当N>2时,此时的跳法数就等于前面两个青蛙跳台阶跳法数之和

在C语言中实现青蛙跳台阶

代码实现

#include<stdio.h>
int Jump(int n)
{
  if (n == 1)
  {
    return 1;//当只有一层台阶时直接返回1
  }
   if (n == 2)
  {
    return 2;//当只有2层台阶时就返回2
  }
   if (n > 2)
   {
     return Jump(n - 1) + Jump(n - 2);
   }//当n>2时,利用递归进行返回
}
int main()
{
  int n = 0;
  scanf("%d", &n);
  int num = Jump(n);
  printf("%d\n", num);
  return 0;
}

问题进阶:

一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶,也可以跳上3级台阶。求该青蛙跳上一个n级的台阶总共有多上种跳法。


思路分析

首先,当N=1时,那么青蛙就有一种跳法。


当N=2时,青蛙可以跳两次一层台阶也可以跳一次二层台阶,有两种跳法


当N=3时,当青蛙首先跳一次一层台阶时,那么还需要跳两层台阶,那它此时就是N=2时的跳法,即有两种跳法。

当青蛙跳一次二层台阶时,此时只需要再跳一层台阶,那么它此时就是N=1时的跳法,即有一种跳法。

最后就是青蛙直接跳三层台阶,只有一种跳法。那么它的跳法总数就是(N=1)+(N=2)+1=4种跳法。


当N=4时,青蛙跳一次一层台阶时,还剩三层台阶需要跳,那它此时就是N=3时的跳法,即有四种跳法。

青蛙跳一次二层台阶时,还剩二层台阶需要跳,那它此时就是N=2时的跳法,则有两种跳法。那么它的跳法总数即为(N=2)+(N=3)=6种跳法。


规律总结


当N>3时,本质上就是前面两个跳法相加就得到此时青蛙跳台阶方法的总数。


代码演示如下:


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

注:

当青蛙每次可以跳k级台阶时咱们也可以像上面这样找到相应的规律求解

总结

今天的内容到这里就结束了,我们今天通过递归的方式具体解决了青蛙跳台阶。如果你还对步骤还有迷惑的话一定要自己试一下,不然光看是非常容易遗忘并且非常不容易理解的,咱们必须反复的练习才能熟悉起来!

好了,如果你有任何疑问欢迎在评论区或者私信我提出,大家下次再见啦!

新人博主创作不易,如果感觉文章内容对你有所帮助的话不妨三连一下这个新人博主再走呗。你们的支持就是我更新的动力!!!


**(可莉请求你们三连支持一下博主!!!点击下方评论点赞收藏帮帮可莉吧)**


20fa3306e76244de9879742c165c792a.gif

目录
相关文章
|
8月前
|
存储 编译器 C语言
爱上C语言:函数递归,青蛙跳台阶图文详解
爱上C语言:函数递归,青蛙跳台阶图文详解
|
C语言
【C语言刷题】青蛙跳台阶
【C语言刷题】青蛙跳台阶
146 1
|
C语言
【C语言实现青蛙跳台阶问题】
【C语言实现青蛙跳台阶问题】
51 0
|
8月前
|
C语言
C语言递归问题【青蛙跳台阶】和【汉诺塔】
C语言递归问题【青蛙跳台阶】和【汉诺塔】
|
7月前
|
算法 C语言
C语言实现青蛙跳台阶问题
C语言实现青蛙跳台阶问题
71 5
|
8月前
|
C语言
【C语言】青蛙跳台阶 —— 详解
【C语言】青蛙跳台阶 —— 详解
|
8月前
|
C语言 索引
【C语言】C语言⻘蛙跳台阶问题--递归问题
【C语言】C语言⻘蛙跳台阶问题--递归问题
|
C语言
【C语言】青蛙跳台阶(两种青蛙跳)
【C语言】青蛙跳台阶(两种青蛙跳)
157 0
|
5天前
|
存储 算法 C语言
【C语言程序设计——函数】素数判定(头歌实践教学平台习题)【合集】
本内容介绍了编写一个判断素数的子函数的任务,涵盖循环控制与跳转语句、算术运算符(%)、以及素数的概念。任务要求在主函数中输入整数并输出是否为素数的信息。相关知识包括 `for` 和 `while` 循环、`break` 和 `continue` 语句、取余运算符 `%` 的使用及素数定义、分布规律和应用场景。编程要求根据提示补充代码,测试说明提供了输入输出示例,最后给出通关代码和测试结果。 任务核心:编写判断素数的子函数并在主函数中调用,涉及循环结构和条件判断。
42 23
|
5天前
|
算法 C语言
【C语言程序设计——函数】利用函数求解最大公约数和最小公倍数(头歌实践教学平台习题)【合集】
本文档介绍了如何编写两个子函数,分别求任意两个整数的最大公约数和最小公倍数。内容涵盖循环控制与跳转语句的使用、最大公约数的求法(包括辗转相除法和更相减损术),以及基于最大公约数求最小公倍数的方法。通过示例代码和测试说明,帮助读者理解和实现相关算法。最终提供了完整的通关代码及测试结果,确保编程任务的成功完成。
29 15