汉诺塔+小青蛙跳台阶---《递归》

news2024/11/14 3:10:03

目录

前言:

1.汉诺塔:

1.1分析盘子数从1-3的情况

1.2盘子移动的规律总结

2.青蛙跳台阶:

2.1跳一个台阶或跳两个台阶

2.2扩展


❤博主CSDN:啊苏要学习

  ▶专栏分类:C语言◀

  C语言的学习,是为我们今后学习其它语言打好基础,C生万物!

  开始我们的C语言之旅吧!✈


前言:

1.汉诺塔:

  在学习完递归后,我们扩展练习一些与递归相关的题目。这些听上去很难,实际上是可以通过一步一步分析,总结规律做出来的抽象题

  汉诺塔(也称河内塔)起源于印度印度古老传说的一个益智游戏。大梵天创造世界的时候,做了三根金刚石柱,在一根柱子上从上往下叠着从小到大的黄金圆盘,我们假设是A柱

  游戏规则是这样的:我们需要把圆盘全部移动到C柱上,每次只能一个一个盘的移动,并且需要保证小的盘不能出现在大盘的下方

1.1分析盘子数从1-3的情况

  第一种:直接将A上的盘子移动到C上,步骤为A->C。

  第二种把底盘的上一个盘子移动到B柱上再将底盘移动到C柱上最后把B柱上的盘子移动到C柱上;A->B;A->C;B->C;

  第三种:抽象理解就是:底盘上的所有盘子被我们移动到B盘上然后将底盘移动到C盘上


  接着抽象的理解就是:将B柱上所有的盘子,移动到C柱子上

1.2盘子移动的规律总结

  盘子数从1到3,分析移动的次数1个盘子的时候,移动了1次(2^1 - 1),2个盘子的时候,移动了3次(2^2 - 1),3个盘子的时候移动了7次(2^3 - 1);由此递推,移动盘子的次数与盘子数的关系是2^n - 1,n是盘子的个数。

  1.只有一个盘子的时候,将底盘移动到C柱上我们得知,如果A柱上已经只剩最大的盘子了,我们需要执行操作A->C

2.有两个盘子的时候,我们需要将底盘上的盘子移动到B柱上让A柱剩下最大的底盘,依旧执行A->C这一步骤;B柱上的1个盘子,和在A柱上只有1个盘子是一样的道理,因为它头顶上没有盘子,直接移动到C就可以了。

3.有三个盘子的时候,我们需要将底盘上的两个盘子,借助C柱的帮助,移动到B柱上,然后第三个盘子执行A->C。此时B柱上有两个盘子,与A柱盘子数为2的情况一致,只不过是在B柱上。我们最终的目的是需要将B柱上的两个盘子移动到C上。在A柱两个盘子的时候,借助B柱完成移动到C,在B柱两个盘子同理,借助A柱完成移动到C

  所以由这三种情况分析得:假设现在盘子数为N,在我们需要将A柱上的第N个盘子上面N-1个盘子移动到B柱上(借助C柱,请参考n = 2的分析)--->将第N个盘子移动到C柱上(请参考n = 1 的分析)--->将总共N-1个盘子从B柱上移动到C柱上。

  •   Hanoi(n - 1, A, C, B)的意思是,将A柱上n-1个盘子,借助C柱,移动到B柱上;
  •   move(A, C)将A柱上,最大的盘子移动到C柱上;
  •   Hanoi(n - 1, B, A, C)的意思是,将B柱上n-1个盘子,借助A柱,移动到C柱上; 

  递归的思想是,将大事化小。Hanoi()函数的本质是想将A柱上的盘借助B柱转移到C柱上。在这个过程中,分成上面的三个步骤完成,大家感兴趣可以写出这段代码后,研究递归过程中的步骤,学会玩汉诺塔游戏。

2.青蛙跳台阶:

2.1跳一个台阶或跳两个台阶

  一只小青蛙,来到一个有N个台阶的楼梯,这只小青蛙每次只能跳一个台阶或两个台阶,试问青蛙有多少种跳法跳到第N个台阶。

  当N = 1时,小青蛙跳一步就到了。一种跳法

  当N = 2时,小青蛙可以选择一步一步跳;也可以一次性跳两步;。两种跳法

  当N = 3时,小青蛙的第一次起跳至关重要!当小青蛙跳选择跳一个台阶,那么接下来小青蛙面对的是两个台阶,此时对这两个台阶的跳法是N = 2时的跳法,有两种当小青蛙选择跳两个台阶,那么剩下的一个台阶就是小青蛙在面对一个台阶时候的跳法,有一种所以当N = 3时,总共有三种跳法

  当N = 4时,同N = 3时分析一样,第一步小青蛙的选择,就决定了后续,类似于数学中的分类加法~当小青蛙跳一个台阶,面对的是N = 3的台阶,有三种跳法;当小青蛙跳两个台阶,面对的是N = 2的台阶,有两种跳法所以当N = 4时,总共有5种跳法

  总结,如果N为1,跳法只有一种;如果N为2,跳法为两种;如果N为3,跳法为前两种跳法的和,跳法为三种;依次类推,可以得知小青蛙是一只懂得斐波那契数列的聪明小青蛙

  JumpWay是求青蛙跳N个台阶的跳法函数,当N等于三时,return JumpWay(2) + JumpWay(1)的意思是,求小青蛙在跳两个台阶、跳一个台阶这两种情况的次数和,符合我们需要的预期,也是正确的~

2.2扩展

  忽然有一天,青蛙跳台阶的能力变强了,小青蛙不仅可以跳两个台阶,三个台阶也行,此时跳到N个台阶又有多少中跳法呢?其实这个规律也可以分析出来,请看:

  当N = 1时,一种跳法。

  当N = 2时,两种跳法。

  当N = 3时,JumpWay(2) + JumpWay(1)  + 1(直接一步到胃!),四种跳法。

  当N = 4时,JumpWay(3) + JumpWay(2)  + JumpWay(1),七种跳法。

  因为N=4时,小青蛙选择跳三个台阶,面对他的是N=1时的情况,就有多一种跳法啦。

  规律是:N = 3时多一种跳法,往后的台阶,跳法等于前三种台阶的跳法和

   7+4+2 = 13种

  好啦,汉诺塔和小青蛙都要和我们说拜拜啦!希望读者读完能有所理解,掌握问题的本质,即使细节比较难懂,也期望思想上对这些问题有认知


结语:希望读者读完有所收获!在学C的路上,祝福我们能越来越C!✔

  读者对本文不理解的地方,或是发现文章在内容上有误等,请在下方评论区留言告诉博主哟~,也可以对博主提出一些文章改进的建议,感激不尽!最后的最后!

  ❤求点赞,求关注,你的点赞是我更新的动力,一起努力进步吧。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

asp.net+C#教育机构高校教务管理系统

1.1用户类别 本系统分为3个角色:管理员、教师、学生; 1、管理员权限最大,排课、调课、汇总各类考试成绩、管理各类用户基本信息,以及各类查询统计、发布公告、收发邮件等功能; 2、教师查看自己的信息、修改登陆密码…

[C++]C++入门(一)

目录 前言: 一、C关键字: 二、命名空间: 三、C输入和输出: 四、缺省参数: 五、函数重载: 六、引用: 常引用: ​编辑引用和指针的区别: 引用和指针的不同点&…

九联UNT401H-Hi3798MV300/MV310-当贝纯净桌面-强刷卡刷固件包

九联UNT401H-Hi3798MV300/MV310-当贝纯净桌面-强刷卡刷固件包-内有教程 特点: 1、适用于对应型号的电视盒子刷机; 2、开放原厂固件屏蔽的市场安装和u盘安装apk; 3、修改dns,三网通用; 4、大量精简内置…

达摩院开源多模态对话大模型mPLUG-Owl

miniGPT-4的热度至今未减,距离LLaVA的推出也不到半个月,而新的看图聊天模型已经问世了。今天要介绍的模型是一款类似于miniGPT-4和LLaVA的多模态对话生成模型,它的名字叫mPLUG-Owl。 论文链接:https://arxiv.org/abs/2304.14178…

《NFT区块链进阶指南二》Etherscan验证Solidity智能合约(Remix插件验证)

文章目录 一、验证说明二、Etherscan Key三、验证插件四、源码认证4.1 Remix验证(推荐)4.1.1 无构造参数合约验证4.1.2 有构造参数合约验证 4.2 单文件验证(不推荐)4.3 Hardhat部署(按照需要) 五、验证结果…

( 位运算 ) 461. 汉明距离 ——【Leetcode每日一题】

❓461. 汉明距离 难度:简单 两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。 给你两个整数 x 和 y,计算并返回它们之间的汉明距离。 示例 1: 输入:x 1, y 4 输出:2 解释: 1…

Python 字典修改对应的键值

将 key ‘1’ 的值 ‘1’, ‘3’, ‘5’ 字符,修改为 ‘2’, ‘4’, ‘5’ 。 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单………

Cy5.5 NHS ester 氨基反应性荧光染料Cyanine5.5 -NHS

Cy5.5 NHS ester是一种常用的荧光探针,可用于细胞或组织的荧光标记,也可用于蛋白质或核酸的标记。Cy5.5 NHS ester的荧光峰位于近红外区域,波长为675nm,具有较强的荧光强度和较长的荧光寿命,适合于生物分子在体内或组织…

用友nc软件被locked1勒索病毒攻击,解密恢复oracle数据库与用友nchome的配置文件

当用友NC软件被locked1勒索病毒攻击后,对应企业的oracle数据库和nchome配置文件往往也会受到影响。数据库和配置文件是企业运营的基础,一旦受到感染会导致企业无法正常运转。因此,遇到这种情况需要采取正确的方法来解密恢复对应的Oracle数据库…

手机日程提醒在哪里设置?

在每天要处理的各类事项比较多,且繁杂的情况下,想要有条不紊地安排好每个时间段应该完成的事项,提前设置好日程提醒是非常有必要的。 那么手机日程提醒在哪里设置呢?无论你使用的是小米、荣耀、OPPO等安卓手机,还是华为…

学顶教育:2023年中级经济师什么时候报名?

一、2023年中级经济师申请时间 2023年中级经济师报名时间预计7、8月左右开始,考试时间为11月11-12日。 届时考生可关注中国人事考试网发布的公告。 二、中级经济师网上报名需提供以下材料: 1、 准备一张白色背景的近期免冠照片,尺寸为25mm…

如何构建一个高效的企业舆情监测系统?

随着互联网的快速发展,企业需要对自身在网络上的形象和声誉进行全方位的监控和管理,以保证企业的长期稳定发展。构建一个高效的企业舆情监测系统已经成为了当下企业发展的必要手段。本文将通过国内具体案例分析,阐述如何构建一个高效的企业舆…

和月薪5W的聊过后,才发现自己一直在打杂···

前几天和一个朋友聊面试,他说上个月同时拿到了腾讯和阿里的offer,最后选择了阿里。 我了解了下他的面试过程,就一点,不管是阿里还是腾讯的面试,这个级别的程序员,都会考察项目管理能力,并且权重…

SLAM论文速递:SLAM—(2021) 基于目标检测的动态环境下的视觉SLAM—5.05(1)

论文信息 题目: Visual SLAM in dynamic environments based on object detection 基于目标检测的动态环境下的视觉SLAM论文地址: https://www.sciencedirect.com/science/article/pii/S2214914720304402发表期刊: Defence Technology,&…

2019年上半年软件设计师下午试题

试题四(共 15 分) 阅读下列说明和 C 代码,回答问题 1 至 3,将解答写在答题纸的对应栏内 【说明】 n 皇后问题描述为:在一个 n*n 的棋盘上摆放 n 个皇后,要求任意两个皇后不能冲突, 即任意两个皇后不在同一行、同一列或者同一斜…

【Java入门合集】第五章抽象类和接口(一)

博主:命运之光 专栏:JAVA入门 学习目标 1.了解什么是抽象类,什么是接口; 2.掌握抽象类和接口的定义方法; 3.理解接口和抽象类的使用场景; 4.掌握多态的含义和用法; 5.掌握内部类的定义方法和使用…

2023爱分析·数据开发与管理平台市场厂商评估报告

01.研究范围定义 利用多种数据智能技术实现数据驱动的分析与决策,已经成为当前企业数字化转型最重要的目标之一。随着数据来源日益丰富、数据体量快速增长,企业对数据的依赖和挖掘愈发深入,不仅带来数据应用场景、数据用户角色的复杂和多元&…

“STL算法大全“

前言 欢迎来到💖小K💖的💞C专栏💞,本小节是继非质变算法的第二篇CSTL算法,所以本节总结了大量的STL算法,以便大家需要时查阅 文章目录 前言质变算法查找算法(13个)排序和通用算法(14个)删除和替…

k8s nfs运行问题、etcd问题、calico网络问题

服务器重启后nfs运行问题导致服务不能正常重启 解决办法 在每个节点下使用如下命令进行查看nfs是否正常启动 systemctl status nfs 如果没有启动,则使用如下命令启动,保证三个节点下的nfs都正常启动 systemctl start nfs 再次查看nfs是否正常启动 syst…

你真的理解PyTorch中的dimension嘛?

文章目录 Understanding dimensions in PyTorch参考 Understanding dimensions in PyTorch 通过可视化3D张量上的求和过程,为PyTorch维度提供更好的直觉 当我们开始用PyTorch张量做一些基本的运算,比如求和时,对于一维张量来说,…