个盘子的汉诺塔需要移动几步_看漫画学C++039:递归解汉诺塔

81f386e15fb78f15efcf25e68a263af2.png

点击蓝字 关注我们

本话内容

请输入

相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。请使用C++程序模拟汉诺塔移动金盘的过程。

0913447bc742ad2f72c9e538b726b492.png0d213fc0ca317741b06653f965d53274.png16910b26b28eaec592a0b0992bda43e5.pngc9230a94eaba0e3cd90c132f9f27f37e.png00476d05f4eddef6cbae154d3e177087.pngb9f531414ea0209bd08180e84b7254be.pngf3e4759171bc73571282fc769d7308b6.pngc4f7a175d99bda26b8d8458b2ed59d99.png67932326c591d9304e03d86a0a9befef.pngf80ae6daa9e908dca147003b0d5e70de.png

对于这样一个问题,任何人都不可能直接写出移动盘子的每一步,但我们可以利用下面的方法来解决。

假设移动盘子数为n,为了将这n个盘子从A柱移动到C柱,可以做以下三步:

  1. 以C柱为中介,从A柱将n-1个盘子移至B柱;

  2. 将底下那个盘子直接从A柱移到C柱;

  3. 以A柱为中介,从B柱将n-1个盘子移至C柱;

上面的3个步骤中,第2步可以直接一步完成,而第1步和第3步并不能直接完成,细心研究发现剩下的n-1个圆盘也可以重复再一次执行上面这3个步骤,在这里可以使用递归的方式。另外如果只有一个圆盘,我们可以直接让它从起始位置移动终点,这也就是递归的终止条件。

#include
using namespace std;
// 定义一个自定义函数,参数含义为:
// n表示有多少个圆盘需要移动
// a表示起始位置
// b表示中转站
// c表示目的地
void move(int n, char a, char b, char c) {
   // 递归终止条件:当只有一个圆盘时,直接将它从起始位置移到目的地
   if (n == 1) {
       cout << a << " ------> " << c << endl;
   } else {
       // 调用自身:将n-1个从a通过c移到b
       move(n - 1, a, c, b);
       // 将最底下那个圆盘起始位置移到目的地
       cout << a << " ------> " << c << endl;
       // 调用自身:将n-1个从b通过a移到c
       move(n - 1, b, a, c);
   }
}
int main() {
   int n = 5;
   move(n, 'A', 'B', 'C');
   return 0;
}

加入“编程玩家俱乐部”知识星球,每天都能学到有意思的编程知识哦。

65a6184845b11327545cb4a77b2a3ce1.png

看漫画学C++

看漫画也能学C++?没错!编程玩家俱乐部新推出系列课程《看漫画学C++》,带你用轻松看漫画的方式来学习C++,本课程面向零基础学员,只要坚持学习并多思考和多练习,相信你一定会成为C++的编程高手!如果喜欢本课程,就收藏一下哦,转发给你的小伙伴们,大家一起来学习!

扫码关注哦

34e43805da40f798ea8c38106b26c183.png

编程玩家俱乐部

微信号 : 编程玩家俱乐部

B站:编程玩家

官网:https://aicodeplayer.com

喜欢本篇内容请给我们点个在看

81f386e15fb78f15efcf25e68a263af2.png

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

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

相关文章

【渝粤题库】广东开放大学 劳动心理学 形成性考核

&#x1f449;关注我,看答案&#x1f448; 选择题 题目&#xff1a;记忆按时间长短可分为&#xff1a;&#xff08; &#xff09;①.感觉记忆 ②.短时记忆 ③.长时记忆 ④.永久记忆 题目&#xff1a;人们对社会上某一事物产生比较固定的看法&#xff0c;也是一种概括而笼统的看…

八位图 16位图_了解位图

八位图 16位图几周前&#xff0c;我和Alistair正在研究用于对节点附加到Neo4j数据库中的标签进行建模的代码。 这种工作方式是将32个节点ID的块表示为每个标签的32位位图 &#xff0c;其中1表示1表示节点具有标签&#xff0c;0表示没有标签。 例如&#xff0c;假设我们有节点…

调制深度,峰均值功率比,脉冲整形等因素对于调制损耗的影响...

我们知道光发射机中一个非常重要的参数是发射功率。如果光发射机处于无源光网络&#xff08;PON&#xff09;&#xff0c;没有后续放大器的情况&#xff0c;发射功率很大程度上决定了发射机可以传输的距离 &#xff08;功率预算&#xff0c;power budget&#xff09;&#xff1…

移动流量转赠给好友_私域流量的五大认知误区

各大品牌主对于私域流量存在的认知误区 &#xff0c;你是否也这样认为&#xff1f;目前看起来&#xff0c;私域流量好像只要前期投入&#xff0c;后期就可以为自身带来源源不断的流量&#xff0c;但是私域流量真的像看起来那么美吗&#xff1f;其实不是的&#xff0c;我们对于私…

MATLAB 将不同长度的一维数组存入二维数组

将多个不同长度的一维数组存入二维数组时&#xff0c;需要将所有一维数组的长度转为相同长度&#xff0c;可以采用在数组后边补零的方式实现。 如果a是行向量&#xff0c;M是你要的最终向量的长度&#xff0c;用 a[a , zeros(1,M-length(a))]; 如果a是列向量&#xff0c;改成 …

使用Spring Boot 2.0的Spring Security:保护端点

到目前为止&#xff0c;在以前的文章中&#xff0c;我们已经使用默认的spring安全配置对端点和控制器进行了安全保护。 当Spring Security在类路径上时&#xff0c;默认情况下自动配置会保护所有端点。 当涉及到复杂的应用程序时&#xff0c;我们需要每个端点使用不同的安全策…

【渝粤题库】广东开放大学 文化活动策划与组织 形成性考核

选择题 题目&#xff1a; 资源的取得或者是天然形成的&#xff0c;或者是人的劳动与自然环境共同作用而形成的。而资源资产的形成可以有什么渠道&#xff1f; 题目&#xff1a; 资源的稀缺性决定了任何一个社会都必须通过一定的方式把有限的资源合理分配到社会的各个领域中去&…

MATLAB 显示输出数据的三种方式

1. 改变数据格式 当数据重复再命令行窗口时&#xff0c;整数以整形形式显示&#xff0c;其他值将以默认格式显示。MATLAB的默认格式是精确到小数点后4位。如果一个数太大或太小&#xff0c;那么将会以科学记数法的形式显示。比如&#xff1a; >> x100.11x 100.1100>…

发言稿开场白范文_发言稿开场白

发言稿开场白导语&#xff1a;无论做领导&#xff0c;还是做下属;无论做教师&#xff0c;还是搞销售;无论教育子女&#xff0c;还是向公众演讲;3分钟内你抓住了听众的心&#xff0c;一切事情就都会变得简单。1、你是否羡慕过陶渊明的人生?是啊&#xff0c;他归隐田园&#xff…

Matlab 语句

1. 显示输出数据的三种方式 1.1 改变数据格式 当数据重复再命令行窗口时&#xff0c;整数以整形形式显示&#xff0c;其他值将以默认格式显示。MATLAB的默认格式是精确到小数点后4位。如果一个数太大或太小&#xff0c;那么将会以科学记数法的形式显示。比如&#xff1a; &g…

.net2.0 orm_Hibernate 4.3 ORM工具

.net2.0 ormHibernate最近发布了Hibernate ORM 4.3的最终版本&#xff0c;它是一个基于Java的ORM框架&#xff0c;它还支持存储过程和实体图。 发行了ORM Tool Hibernate 4.3&#xff0c;实现了JPA 2.1规范&#xff0c;引入了该发行版的主要功能&#xff0c;简而言之&#xff1…

千寻和省cors精度对比_使用中海达RTK实战演示千寻cors账号对比省cors网络,验证其测量效果究竟如何...

原标题&#xff1a;使用中海达RTK实战演示千寻cors账号对比省cors网络&#xff0c;验证其测量效果究竟如何最近看到有很多的网友都在问千寻cors账号的定位服务怎么样&#xff1f;还在考虑要不要从省cors网络转用千寻cors网络&#xff1f;其实&#xff0c;作为用户来说&#xff…

【渝粤题库】广东开放大学 物业财税管理基础 形成性考核 (2)

选择题 题目&#xff1a;企业将资金以购买债券、提供借款或商业信用等形式出借给其他单位&#xff0c;这是一种&#xff08; &#xff09;的财务关系。 题目&#xff1a;&#xff08; &#xff09;是指买卖双方成交后&#xff0c;在双方约定的未来某一特定的时日才交割的交易市…

【渝粤题库】广东开放大学 综合英语1 形成性考核 (2)

选择题 题目&#xff1a; There is no ________, so we will begin with the next project. 选择一项&#xff1a; 题目&#xff1a; If a company wants to see its products ________, it should do some world market report first. 选择一项&#xff1a; 题目&#xff…

Probability, Matringale,Markov Chain, MCMC

一、基本知识 1. 条件概率 条件概率是指在某件事情已经发生的前提下&#xff0c;另一件事情在此基础上发生的概率&#xff0c;举例来说P(A丨B)表示B发生的基础上&#xff0c;A也发生的概率&#xff0c;基本公式为&#xff1a; 2. 条件期望 在上述概率下的期望我们称之为条…

html 按钮 按下 状态_科普|你身边的手动火灾报警按钮,您了解吗?

手动火灾报警按钮手动火灾报警按钮&#xff0c;是火灾报警系统中的一个设备类型&#xff0c;当建筑发生火灾时在火灾探测器没有探测到火灾的时候人员手动按下手动火灾报警按钮&#xff0c;报告火灾信号&#xff0c;向建筑所属消防控制室报火警。正常情况下当手动火灾报警按钮报…

Apache Ant 1.9.13和1.10.5发布–支持Java 11单文件源程序

我们刚刚发布了Apache Ant的1.9.13和1.10.5版本 。 与往常一样&#xff0c;您可以从Ant项目下载页面下载它。 这两个版本主要是错误修复版本。 但是&#xff0c;1.10.5版对“ java”任务进行了新的增强。 正如我之前写的那样 &#xff0c;Java 11引入了一项新功能&#xff0c;…

【渝粤题库】广东开放大学 质量管理 形成性考核 (2)

选择题 题目&#xff1a;王鑫老师有什么怪癖&#xff1f; 题目&#xff1a;如果觉得某次讨论成绩不理想&#xff0c;也可以像单元测验那样再重新回答一次&#xff0c;老师会重新给分的。 题目&#xff1a;以下关于课程勋章的说法&#xff0c;哪些是“正确”的&#xff1f; 题目…

ubuntu按方向键出现abcd_Ubuntu Vi方向键[A [B [C [D问题解决

在ubuntu下&#xff0c; vi 在编辑模式下使用方向键时没有移动光标&#xff0c;而是在出现 [A [B [C [D 之类的字母乱码。编辑错误的话&#xff0c;就连退格键(Backspace键)都使用不了&#xff0c;只能用Delete来删除。方法一&#xff1a;编辑/etc/vim/vimrc.tiny文件root权限下…

【渝粤题库】陕西师范大学100200 信息技术教育应用 作业 (专升本、高起专、高起本)

一、选择题 1、人类信息技术发展的第一次飞跃发生在&#xff1a; A&#xff0e;古代社会 B&#xff0e;近代社会 C&#xff0e; 现代社会 D&#xff0e; 当代社会 2、计算机I/O设备指的是计算机系统的: A&#xff0e;控制设备; B&#xff0e;存储设备 C&#xff0e;输入/输出设…