递归求解汉诺塔问题(C++)

【问题描述】
Hanoi(汉诺)塔问题。这是一个经典的数学问题:古代有一个梵塔,塔内有3个座A,B,C,开始时A座上有64 个盘子,盘子大小不等,大的在下,小的在上。有一个老和尚想把这64个盘子从A座移到C座,但每次只允许移动个盘,且在移动过程中在3个座上都始终保持大盘在下,小盘在上。在E移动过程中可以利用B座,要求编写程序打印出若只有n个盘子时移动的步骤。

【问题分析】
1.假设最开始A座上有n个盘子,如果我们能够将最下面的盘子通过B座移到C座上,则我们只需要再把A座上的n-1个盘子全部挪到C座即可。
2.要将最下面的盘子移到C座上,则必须先将上边的n-1个盘子通过C座挪到B座上,再把最大的盘子直接挪到C座即可。
3.然后再将B座上的n-1个盘子通过A座挪到C座上即可,这样就实现了一个递归。

【代码实现】

#include <iostream>
using namespace std;
int main()
{void hnt(int n,char a,char b,char c);int num;char a,b,c;a='A';b='B';c='C'; cin>>num;hnt(num,a,b,c);return 0;
}
void hnt(int n,char a,char b,char c)
{if(n==1) cout<<a<<"--->"<<c<<endl;else{hnt(n-1,a,c,b);hnt(1,a,b,c);hnt(n-1,b,a,c);}
}

若要求再对盘子进行编号,实现代码如下:

#include <iostream>
using namespace std;
void Move(int n,char x,char y)
{cout<<x<<"->"<<n<<"->"<<y<<endl;
}
void Hannoi(int n,char a,char c,char b)
{if(n==1) Move(1,a,b);else{Hannoi(n-1,a,b,c);Move(n,a,b);Hannoi(n-1,c,a,b);}
}
int main()
{int n;char a,b,c;cin>>n>>a>>b>>c;Hannoi(n,a,c,b);return 0;
}

递归求解汉诺塔问题(C++)相关推荐

  1. Py:递归求解汉诺塔,简单的几行编程可以搞定很高层的三柱汉诺塔游戏

    Py:递归求解汉诺塔,简单的几行编程可以搞定很高层的三柱汉诺塔游戏 目录 输出结果 核心代码 输出结果 核心代码 def hanoi(n,x,y,z):if n==1:print(x,'--→',z) ...

  2. C语言——生存期和存储类型、递归、递归求解汉诺塔、快速排序

    目录 一.生存期和存储类型 1.生存期 2.存储类型 3.自动变量(auto) 4.寄存器变量(register) 5.静态局部变量(static) 6.static 和 extern 二.递归 1. ...

  3. Java 通过递归求解汉诺塔问题 源码 经典递归问题讲解

    汉诺塔问题描述:有三根柱子 A.B.C ,在A从下向上按照从大到小的顺序放着64个圆盘,以B为中介,把盘子全部移动到C上.移动过程中,要求任意盘子的下面要么没有盘子,要么只能有比它大的盘子. 分析:为 ...

  4. java实现求解汉诺塔问题(提示, 使用递归)

    实现代码: 求解汉诺塔问题(提示, 使用递归) 汉诺塔问题是一个经典的问题.汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说. 大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从 ...

  5. 栈和队列----用栈求解汉诺塔问题

    用栈求解汉诺塔问题 汉诺塔问题比较经典,现在修改一下汉诺塔游戏的规则:规定不能直接从左移动到右,也不能直接从右移动到左,必须经过中柱,求解当塔有N层的时候,打印最优移动过程和最优移动总步数. 可以采用 ...

  6. python汉诺塔游戏_python求解汉诺塔游戏

    本文实例为大家分享了python求解汉诺塔游戏的具体代码,供大家参考,具体内容如下 一.问题定义 百度百科定义:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.据说大梵天创造世界的时候做了三 ...

  7. Python递归实现汉诺塔

    Python递归实现汉诺塔: def f3(n,x,y,z): if(n==1):print(x,'--->',z)else:f3(n-1,x,z,y)print(x,'--->',z)f ...

  8. 用栈来求解汉诺塔变形问题

    package stackAndQueue;import java.util.Stack;/*** 用栈来求解汉诺塔问题:HanoiStack[3]* * [问题描述]:将汉诺塔游戏(小压大)规则修改 ...

  9. c语言递归汉诺塔次数,c语言递归解决汉诺塔参数变化的疑惑

    c语言递归解决汉诺塔参数变化的疑惑 答案:3  信息版本:手机版 解决时间 2020-04-05 14:20 已解决 2020-04-05 10:49 #include void main() {vo ...

  10. c语言递归解决汉诺塔问题

    c语言递归解决汉诺塔问题 参考文章: (1)c语言递归解决汉诺塔问题 (2)https://www.cnblogs.com/didiaoxiaoguai/p/6686407.html 备忘一下.

最新文章

  1. 你需要的大概不是 enumerated
  2. java 分布式事务 mq_ActiveMQ分布式事务
  3. 程序员是否必须会算法
  4. Windows服务器部分告一段落,开始转入Linux
  5. 以人为本的机器学习:谷歌人工智能产品设计概述 By 机器之心2017年7月17日 12:13 取代了手动编程,机器学习(ML)是一种帮助计算机发现数据中的模式和关系的科学。对于创建个人的和动态的经历
  6. WriteFile和GetSystemDirectory
  7. MongoDB配置参数说明
  8. 柯南君:看大数据时代下的IT架构(4)消息队列之RabbitMQ--案例(Helloword起航)...
  9. Arbitrage(判断正环 spfa写法)
  10. Hadoop2.x介绍与源代码编译
  11. flex builder 4.6 for Apple iOS应用程序打包(MAC)
  12. linux添加phoenix引导,Phoenix OS安装方法
  13. 竖排文字的3种设计方法
  14. [02.20][中国][人再囧途之泰囧][HD-RMVB.720p.国语中字][2012年喜剧]
  15. 体育用品商城小程序开发功能
  16. 租用免费备案的服务器有哪些优势
  17. 【强化学习】策略梯度(Policy Gradient)
  18. tree是不是动词_【大年初五】暑假里必须复习的40个重点知识点,不看就亏大了!...
  19. 创新实训(6)——有关博客的摘要抽取的算法实现(TextRank)
  20. s32ds 路径_S32DS 使用 tips--工程属性配置(编译选项和C编译器、汇编器及链接器设置)...

热门文章

  1. Java线程拾遗(可重入锁)
  2. Flink 在人工智能领域的应用实践
  3. IDEA 卡成球了 !咋优化 ?
  4. 厉害了!为了干掉 HTTP ,Spring团队又开源 nohttp 项目!
  5. 程序员,如何在工作之外,增加自己的收入?
  6. android快速充电实现_Android 8.0 慢充和快充提示语的实现原理
  7. python random模块安装_Python中的For循环和Random模块
  8. python打开浏览器全屏_python 打开浏览器的两种方式
  9. mnist tensorrt 运行_TensorRT学习笔记(三)
  10. 打不开_网站源码安装后打不开?教你解决打不开