个盘子的汉诺塔需要移动几步_看漫画学C++039:递归解汉诺塔
点击蓝字 关注我们
本话内容
请输入
相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。请使用C++程序模拟汉诺塔移动金盘的过程。
对于这样一个问题,任何人都不可能直接写出移动盘子的每一步,但我们可以利用下面的方法来解决。
假设移动盘子数为n,为了将这n个盘子从A柱移动到C柱,可以做以下三步:
以C柱为中介,从A柱将n-1个盘子移至B柱;
将底下那个盘子直接从A柱移到C柱;
以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;
}
加入“编程玩家俱乐部”知识星球,每天都能学到有意思的编程知识哦。
看漫画学C++
看漫画也能学C++?没错!编程玩家俱乐部新推出系列课程《看漫画学C++》,带你用轻松看漫画的方式来学习C++,本课程面向零基础学员,只要坚持学习并多思考和多练习,相信你一定会成为C++的编程高手!如果喜欢本课程,就收藏一下哦,转发给你的小伙伴们,大家一起来学习!
扫码关注哦
编程玩家俱乐部
微信号 : 编程玩家俱乐部
B站:编程玩家
官网:https://aicodeplayer.com
喜欢本篇内容请给我们点个在看
个盘子的汉诺塔需要移动几步_看漫画学C++039:递归解汉诺塔相关推荐
- 个盘子的汉诺塔需要移动几步_图解汉诺塔问题( Java 递归实现)
汉诺塔简介 最近在看数据结构和算法,遇到了一个非常有意思的问题--汉诺塔问题. 先看下百度百科是怎么定义汉诺塔的规则的: 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候 ...
- 个盘子的汉诺塔需要移动几步_坨——理解递归实现quot;汉诺塔quot;代码的关键...
我记得,大学学C语言时,在函数递归调用那一节有个作业,就是写汉诺塔.不少同学遭遇到困难.在知乎上遇见的就有: 如何理解汉诺塔的递归?www.zhihu.com 题主发出悲鸣:"--学C++ ...
- Py:递归求解汉诺塔,简单的几行编程可以搞定很高层的三柱汉诺塔游戏
Py:递归求解汉诺塔,简单的几行编程可以搞定很高层的三柱汉诺塔游戏 目录 输出结果 核心代码 输出结果 核心代码 def hanoi(n,x,y,z):if n==1:print(x,'--→',z) ...
- c语言递归汉诺塔次数,c语言递归解决汉诺塔参数变化的疑惑
c语言递归解决汉诺塔参数变化的疑惑 答案:3 信息版本:手机版 解决时间 2020-04-05 14:20 已解决 2020-04-05 10:49 #include void main() {vo ...
- c语言 统计数量用count_C语言编程学习之递归实现汉诺塔图解!还有零基础入门视频~...
C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...
- 算法:递归(汉诺塔)
要点:函数定义中调用函数自身的方式形成递归. 递归的定义:递归,就是在运行的过程中调用自己. 数学上有个经典的递归例子叫阶乘,阶乘通常定义如下: n! = n(n-1)(n-2)-(1) 为了算出这个 ...
- C语言——生存期和存储类型、递归、递归求解汉诺塔、快速排序
目录 一.生存期和存储类型 1.生存期 2.存储类型 3.自动变量(auto) 4.寄存器变量(register) 5.静态局部变量(static) 6.static 和 extern 二.递归 1. ...
- 数据结构学习笔记:递归和汉诺塔问题
什么是递归 在数据结构-树中,对于树的遍历采用的是递归来遍历的. 递归就好比套娃,在满足条件的情况下会一直调用本身.问题的求解过程就是划分成许多相同性质的子问题的求解,而小问题的求解过程可以很容易的求 ...
- python实现汉诺塔递归经典算法_Python递归实现汉诺塔算法示例
本文实例讲述了Python递归实现汉诺塔算法.分享给大家供大家参考,具体如下: 最近面试题,面试官让我5分钟实现汉诺塔算法(已然忘记汉诺塔是啥). 痛定思痛,回来查了一下汉诺塔的题目和算法.题干与实现 ...
最新文章
- 2015211230108《Java程序设计》第10周学习总结
- libgdx使用android控件,在Android上使用libGDX中的SQLite
- uniapp h5页面 在移动端 使用clipboardone.js插件实现 写入剪切板 -- 安卓和ios安美适配(仅测试部分机型)
- leetcode1267. 统计参与通信的服务器(dfs)
- github迁移到gitee相关问题
- 情人节,找个程序员当男朋友,一般都不会太差
- jsp mysql超市管理系统_jsp超市管理系统 基于jsp+servlet+MySQL的超市管理系统(带数据库) - 下载 - 搜珍网...
- 【报告分享】2020年中国数据驱动型企业成长路径研究报告.pdf(附下载链接)...
- Freemarker判断对象是否为空的用法
- Android FrameWork——Activity启动过程详解
- Objective-C中的UIScrollView
- 万兆网文件服务器,万兆以太网网卡网吧服务器中的应用
- 【STM32H7】第5章 ThreadX NetXDUO网络协议栈介绍
- 科沃斯扫地机器人哪个型号最实用_科沃斯扫地机哪个型号好 三个价位三种选择...
- 收到QQ尾巴 Worm.QQ.TopFox.bo 送来的“我的近照11.zip”
- JavaScript学习笔记2——JavaScript操作BOM对象
- 华擎主板bios设置图解_华擎主板bios设置_华擎主板bios设置图解_asrock主板bios设置...
- ubuntu中静态ip的修改配置
- 《操作系统》期末复习题
- jacob操作word和excel
热门文章
- 想要更快地使用AtomicLong? 等待它。
- 选择技术栈构建通用平台
- Spring Integration关键案例与现实生活场景
- JavaFX逆运动学库2.0
- 使用内存映射文件获取巨大的矩阵
- go 监测tcp 连接断开_TCP三次握手和四次挥手以及11种状态
- 报错java.lang.NoClassDefFoundError: ognl/DefaultMemberAccess
- IntelliJ IDEA修改项目的包名_修改包名
- MySQL数据库模式(SQL_MODE)中的STRICT_TRANS_TABLES和STRICT_ALL_TABLES
- java魔兽猎人_Java基于Swing实现的打猎射击游戏代码