C++汉诺塔问题(河内塔)
C++汉诺塔问题(河内塔)
这是一个非常经典的递归问题。
递归:在函数内部又再次调用函数自身的问题
假设有n个盘子,需要把这些盘子从第一根起始柱A移动到第三根目标柱C中。
1、首先需要把n-1个盘子移动到第二根中转柱B上;
2、再把最后一个也就是最大的那一个盘子移动到第三根目标柱C上;
3、最后再把剩下的n-1个盘子移动到第三根目标柱C上。
我们定义f ( n ) f(n)f(n)是需要移动的次数;
f ( 1 ) = 1 , f ( 2 ) = 3 , f ( 3 ) = 7 f(1) = 1,f(2) = 3,f(3) = 7f(1)=1,f(2)=3,f(3)=7
…
f ( n ) = 2 f ( n − 1 ) + 1 f(n) = 2f(n-1)+1f(n)=2f(n−1)+1
#include<iostream>
#include<stdio.h>
using namespace std;
void move(int n, char pos1, char pos3)
{
//打印移动的过程
// 1代表上面最小的盘子
// 2代表中间位置的盘子
// 3代表下面最大的盘子
cout << "盘子" << n << "从" << pos1 << "移动到" << pos3<<endl;
}
void Hanoi(int n, char pos1, char pos2, char pos3)
{
//如果是1个盘子,直接从起始柱A移动到目标柱C
if (n == 1)
{
move(n, pos1, pos3);
}
else
{
//如果盘子大于1个,需要把n-1个盘子,从起始柱pos1,通过目标柱pos3,移动到中转柱pos2
Hanoi(n - 1, pos1, pos3, pos2);
//此时pos1上的n-1个盘子全部移动pos2上去了,那么可以直接把pos1上剩下的1个盘子,直接移动到pos3上
move(n, pos1, pos3);
//把pos2剩下的n-1个盘子,通过中转位置pos1,移动到目标位置pos3
Hanoi(n - 1, pos2, pos1, pos3);
}
}
int main()
{
//盘子个数
int n = 5;
//起始柱A
char pos1 = 'A';
//中转柱B
char pos2 = 'B';
//目标柱C
char pos3 = 'C';
cout << "移动盘子的顺序如下" << "这里有" << n << "个盘子:" << endl;
//汉诺塔函数
Hanoi(n, pos1, pos2, pos3);
return 0;
}
C++汉诺塔问题(河内塔)相关推荐
- C#之汉诺塔(河内塔)递归问题
C#之汉诺塔(河内塔)递归问题 前言 一.汉诺塔问题 二.问题思考 1.简单定义一下 2.假设简单的情况 3.推广 4.核心代码 总结 前言 小时候在直板手机上玩过这么一款叫做"汉诺塔&qu ...
- PTA汉诺(Hanoi)塔问题
PTA汉诺(Hanoi)塔问题 古代某寺庙中有一个梵塔,塔内有3个座A.B和C,座A上放着64个大小不等的盘,其中大盘在下,小盘在上.有一个和尚想把这64 个盘从座A搬到座B,但一次只能搬一个盘,搬动 ...
- 汉诺塔(河内塔)问题
汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放 ...
- 小知识系列(3):Hanoi塔(汉诺塔,河内塔)
同样,借此来强化学习,但是说实话我写这个感觉很玄.Hanoi塔是昨天刚学到的东西,想了很久,感觉还是没有悟透,可能学到更多新东西,或产生了新的想法,或突然悟到了什么,届时会再做修改. 看了很多关于Ha ...
- 汉诺塔(河内塔)问题解析(函数递归经典问题)
目录 1. 题目描述 2. 题目目标 3. 题目分析 1. 题目描述 在一块铜板装置上,有三根杆(编号A.B.C),在A杆自上而下.由大到下按顺序放置n个盘子. 2. 题目目标 把A杆上的盘子全部转移 ...
- 汉诺塔(河内塔)算法与心得
问题:给定一个由n个圆盘组成的塔,这些圆盘按照大小递减的方式套在三根桩柱中的一根上.我们的目的是要将整个塔移动到另一根桩柱上,每次只能移动一个圆盘,且较大的圆盘在移动过程中不能放置在较小的圆盘上面. ...
- 汉诺(Hanoi)塔问题
用C语言解决(Hanoi)汉诺塔问题 首先,我们先给出(Hanoi)汉诺塔问题: 相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏.该游戏是在一块铜板装置上,有三根杆(编号A.B.C),在A ...
- java优秀算法河内之塔_河内塔的Java程序
java优秀算法河内之塔 Tower of Hanoi is a mathematical puzzle where we have three rods and n disks. The objec ...
- 河内之塔java_java优秀算法河内之塔_河内塔的Java程序
java优秀算法河内之塔 Tower of Hanoi is a mathematical puzzle where we have three rods and n disks. The objec ...
- 第10章 例题 7-4 汉诺(Hanoi)塔问题
古代某寺庙中有一个梵塔,塔内有3个座A.B和C,座A上放着64个大小不等的盘,其中大盘在下,小盘在上.有一个和尚想把这64 个盘从座A搬到座B,但一次只能搬一个盘,搬动的盘只允许放在其他两个座上,且大 ...
最新文章
- 在C#中如何在客户端接收信件
- 约瑟夫生死环游戏c语言程序,使用C++实现的约瑟夫生死游戏
- 算法:不同二叉搜索树||
- python 调用bat失败_要想顺利通过Python面试,你最起码需要达到白银段位!
- extend 对象继承
- 程序员面试HR你该看重什么?!
- 电子邮件传输算法-Base64
- 一年太久,研究员决定不等补丁直接披露 Safari 0day 详情
- 记一次hive 报错NoViableAltException(-1@[215:51: ( KW_AS )?])
- JZOJ5465. 【NOIP2017提高A组冲刺11.9】道路重建
- 基于因子分析法分析新冠肺炎疫情对房地产业上市公司财务的影响
- 2018年全国大学生电子设计竞赛
- Amoeba:开源的分布式数据库Porxy解决方案
- spark本地项目报错:Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
- 4274. 【NOIP2015模拟10.28B组】终章-剑之魂
- 潮汕明代皇封御葬古墓受损追踪:当地相关部门介入
- ECLIPSE中添加TPTP插件
- 国外创业者分享之一个iOS游戏赚了多少钱?普通 iOS 应用的收入能否养活自己
- SystemVerilog中的Events事件
- 基于matab GUI的图形处理火焰检测系统