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++汉诺塔问题(河内塔)相关推荐

  1. C#之汉诺塔(河内塔)递归问题

    C#之汉诺塔(河内塔)递归问题 前言 一.汉诺塔问题 二.问题思考 1.简单定义一下 2.假设简单的情况 3.推广 4.核心代码 总结 前言 小时候在直板手机上玩过这么一款叫做"汉诺塔&qu ...

  2. PTA汉诺(Hanoi)塔问题

    PTA汉诺(Hanoi)塔问题 古代某寺庙中有一个梵塔,塔内有3个座A.B和C,座A上放着64个大小不等的盘,其中大盘在下,小盘在上.有一个和尚想把这64 个盘从座A搬到座B,但一次只能搬一个盘,搬动 ...

  3. 汉诺塔(河内塔)问题

    汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放 ...

  4. 小知识系列(3):Hanoi塔(汉诺塔,河内塔)

    同样,借此来强化学习,但是说实话我写这个感觉很玄.Hanoi塔是昨天刚学到的东西,想了很久,感觉还是没有悟透,可能学到更多新东西,或产生了新的想法,或突然悟到了什么,届时会再做修改. 看了很多关于Ha ...

  5. 汉诺塔(河内塔)问题解析(函数递归经典问题)

    目录 1. 题目描述 2. 题目目标 3. 题目分析 1. 题目描述 在一块铜板装置上,有三根杆(编号A.B.C),在A杆自上而下.由大到下按顺序放置n个盘子. 2. 题目目标 把A杆上的盘子全部转移 ...

  6. 汉诺塔(河内塔)算法与心得

    问题:给定一个由n个圆盘组成的塔,这些圆盘按照大小递减的方式套在三根桩柱中的一根上.我们的目的是要将整个塔移动到另一根桩柱上,每次只能移动一个圆盘,且较大的圆盘在移动过程中不能放置在较小的圆盘上面. ...

  7. 汉诺(Hanoi)塔问题

    用C语言解决(Hanoi)汉诺塔问题 首先,我们先给出(Hanoi)汉诺塔问题: 相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏.该游戏是在一块铜板装置上,有三根杆(编号A.B.C),在A ...

  8. java优秀算法河内之塔_河内塔的Java程序

    java优秀算法河内之塔 Tower of Hanoi is a mathematical puzzle where we have three rods and n disks. The objec ...

  9. 河内之塔java_java优秀算法河内之塔_河内塔的Java程序

    java优秀算法河内之塔 Tower of Hanoi is a mathematical puzzle where we have three rods and n disks. The objec ...

  10. 第10章 例题 7-4 汉诺(Hanoi)塔问题

    古代某寺庙中有一个梵塔,塔内有3个座A.B和C,座A上放着64个大小不等的盘,其中大盘在下,小盘在上.有一个和尚想把这64 个盘从座A搬到座B,但一次只能搬一个盘,搬动的盘只允许放在其他两个座上,且大 ...

最新文章

  1. 在C#中如何在客户端接收信件
  2. 约瑟夫生死环游戏c语言程序,使用C++实现的约瑟夫生死游戏
  3. 算法:不同二叉搜索树||
  4. python 调用bat失败_要想顺利通过Python面试,你最起码需要达到白银段位!
  5. extend 对象继承
  6. 程序员面试HR你该看重什么?!
  7. 电子邮件传输算法-Base64
  8. 一年太久,研究员决定不等补丁直接披露 Safari 0day 详情
  9. 记一次hive 报错NoViableAltException(-1@[215:51: ( KW_AS )?])
  10. JZOJ5465. 【NOIP2017提高A组冲刺11.9】道路重建
  11. 基于因子分析法分析新冠肺炎疫情对房地产业上市公司财务的影响
  12. 2018年全国大学生电子设计竞赛
  13. Amoeba:开源的分布式数据库Porxy解决方案
  14. spark本地项目报错:Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
  15. 4274. 【NOIP2015模拟10.28B组】终章-剑之魂
  16. 潮汕明代皇封御葬古墓受损追踪:当地相关部门介入
  17. ECLIPSE中添加TPTP插件
  18. 国外创业者分享之一个iOS游戏赚了多少钱?普通 iOS 应用的收入能否养活自己
  19. SystemVerilog中的Events事件
  20. 基于matab GUI的图形处理火焰检测系统

热门文章

  1. eNSP:静态路由中的缺省路由
  2. windows 开机取消登录密码
  3. 2022最经典送朋友的生日祝福短信【精】
  4. 2022虎年新UI春节送祝福微信小程序源码下载支持多种流量主
  5. application.yml数据库配置
  6. 服务器IP能修改密码,服务器的ip地址怎么修改密码
  7. RK3588 Android12 广和通L716 4G模块调试记录
  8. 2022年专精特新各地区补贴政策汇总
  9. 产品经理必修课(4)toB产品思考需要了解的部分知识
  10. 《*** 经济思想学习纲要》学习辅导