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

在这里插入图片描述

君兮_的个人主页

勤时当勉励 岁月不待人

C/C++ 游戏开发


Hello,这里是君兮_,今天更新的是经典递归问题——青蛙跳台阶,在所有有关递归的问题中,青蛙跳台阶是最广为人知的问题之一,可以说,如果你能真正弄懂青蛙跳台阶问题,你的递归也一定不会太差,今天就来带大家深度解析一下青蛙跳台阶问题。

青蛙跳台阶

  • 青蛙跳台阶问题的详细描述
  • 具体解决青蛙跳台阶问题
    • 青蛙跳台阶问题解题思路分析
      • 思路总结
    • 在C语言中实现青蛙跳台阶
      • 问题进阶:
      • 思路分析
  • 总结

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

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


具体解决青蛙跳台阶问题

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

  • 当N=1时,那么青蛙就只有一种跳法。
    在这里插入图片描述

  • 当N=2时,青蛙可以跳两次一层台阶也可以跳一次二层台阶,有两种跳法。
    在这里插入图片描述

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

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

  • 此时它的跳法就等于(N=1)+(N=2)种跳法。
    在这里插入图片描述

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

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

  • 那么此时它的跳法就等于(N=2)+(N=3)种跳法。
    在这里插入图片描述

思路总结

  • 那么,不难看出青蛙跳台阶的规律,当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级台阶时咱们也可以像上面这样找到相应的规律求解

总结

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

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

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

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/461.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

生产者与消费者问题

本篇文章我们使用C探讨一下生产者与消费者问题. 1. 多线程的引入 我们学习了操作系统, 知道了进程和线程的概念, 但是如果不进行代码实战的话, 会很难理解它们. 特别是编程的初学者(比如我), 在了解了进程和线程后通常会感到疑惑: 多线程怎么用? 为啥我平时写代码没有使用到…

Mybatis源码分析_解析大流程梳理_解析配置文件 (3)

学习mybatis&#xff0c;绕不开一个核心类 Configuration。这个类相当于一个小型数据库&#xff0c;把mybatis里面所有的配置信息基本全部给存储起来了。 package org.apache.ibatis.session;import java.util.Arrays; import java.util.Collection; import java.util.HashMap;…

Vue3+VueCli+TS官方模板简析

使用脚手架安装相关依赖 使用vueCli 安装预设的vuextslessrouter ## 查看vue/cli版本&#xff0c;确保vue/cli版本在4.5.0以上 vue --version## 安装或者升级你的vue/cli npm install -g vue/cli## 创建 vue create vue3_cli_ts_htgl //create vue3_cli_ts_htgl为自…

ELFK日志分析系统并使用Filter对日志数据进行处理

系列文章目录 文章目录 系列文章目录一、FilebeatELK1.FilebeatELK 部署2.Filebeat 节点上操作 二、Filter1.内置正则表达式调用 总结 一、FilebeatELK 1.FilebeatELK 部署 Node1节点&#xff08;2C/4G&#xff09;&#xff1a;node1/192.168.169.10 Elasticsearch Node2节点…

深入浅出之Docker Compose详解

目录 1.Docker Compose概述 1.1 Docker Compose 定义 1.2 Docker Compose产生背景 1.3 Docker Compose 核心概念 1.4 Docker Compose 使用步骤 1.5 Docker Compose 常用命令 2. Docker Compose 实战 2.1 Docker Compose下载和卸载 2.2 Docker Compose 项目概述 2.3 Do…

从0到1搭建spring cloud alibaba +springboot+nacos+dubbo微服务

版本关系&#xff1a; spring cloud alibaba各组件对应关系 创建父工程&#xff0c;pom.xml配置如下&#xff1a; 由以上版本对应关系&#xff1a; springboot版本&#xff1a;2.3.2.RELEASE spring cloud 版本选择&#xff1a;Hoxton.SR9 spring cloud alibaba版本选择&#…

Elasticsearch:增量快照如何工作?

作者&#xff1a;Lutf ur Rehman Elastic 提供许多由讲师指导的面对面和虚拟现场培训以及点播培训。 我们的旗舰课程是 Elasticsearch 工程师、Kibana 数据分析和 Elastic 可观测性工程师。 所有这些课程都会获得认证。如果你想更多了解这些认证方面的知识&#xff0c;请阅读文…

5-NumPy如何创建N维数组?【视频版】

目录 问题视频解答 问题 视频解答 点击观看&#xff1a; 5-如何创建等N维数组&#xff1f;

大佬详细讲解:银行核心项目之测试阶段

最近有小伙伴留言说「想了解核心系统建设中&#xff0c;冒烟、SIT、UAT、回归测试的重点&#xff0c;如何设计测试案例&#xff0c;或相关的资料推荐等」。 这个话题很笼统&#xff0c;测试这一块儿除了业务测试&#xff0c;还有性能测试、安全测试等&#xff1b;以及不同的角…

本地Linux 部署 Dashy 并远程访问

文章目录 简介1. 安装Dashy2. 安装cpolar3.配置公网访问地址4. 固定域名访问 转载自cpolar极点云文章&#xff1a;本地Linux 部署 Dashy 并远程访问 简介 Dashy 是一个开源的自托管的导航页配置服务&#xff0c;具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你…

Sequential用法

目录 1.官方文档解释 1.1原文参照 1.2中文解释 2.参考代码 3.一些参考使用 3.1生成网络 3.2 感知机的实现 3.3组装网络层 1.官方文档解释 1.1原文参照 A sequential container. Modules will be added to it in the order they are passed in the constructor. A…

OJ# 376 机器翻译

题目描述 ​ 小李的电脑上安装了一个机器翻译软件&#xff0c;他经常用这个软件来翻译英语文章。 ​这个翻译软件的原理很简单&#xff0c;它只是从头到尾&#xff0c;依次将每个英文单词用对应的中文含义来替换。对于每个英文单词&#xff0c;软件会先在内存中查找这个单词的…