1.汉诺塔问题描述

N阶汉诺塔:假设有3个分别命名为x,y,z的三个塔座,在x上有n个盘子,直径大小不同,有小到大按标号1,2,3...n排列,要借助y将n个盘子转移到z上,期间不能让小盘子压在大盘子上。规则:

  • 每次至移动一个盘子;
  • 盘子可以插在x,y,z任意一个塔座上;
  • 任何时候都不能将大盘压在小盘上。

2.解题思路

当n=1时,直接把盘子由x——>z;

当n>1时,需利用y,首先将(n-1)个盘子由x——>y,把第n个实现x——>z,然后把问题转换为实现(n-1)个盘子由y——>z,借助x;

实现n个盘子由x到z的时候,先把n-1个搬到y上,把第n个搬到z上;然后再借助z,把n-1个盘子搬回x.

循环实现(n-1)个盘子由x到z.

注意:最初递归中涉及到搬盘子都用move()实现一落盘子中最大的那一个,可以在此坐标记。

3.代码

package hanoi;
public class hanoi {
    private int c=0;
    public void hanoi(int n,char x,char y,char z){
        if (n==1)
        {
            move(x,1,z);
        }else
        {
            hanoi(n-1,x,z,y);
            move(x,n,z);
            hanoi(n-1,y,x,z);
        }
    }    
public void move(char x,int n,char z){
    System.out.println("第"+ ++c +"次移动:"+n+"号盘子,"+x+"——>"+z);
}
public static void main(String[] args){
    hanoi e=new hanoi();
    e.hanoi(5, 'x', 'y', 'z');
}
}

n=4时,运行结果:

第1次移动:1号盘子,x——>y
第2次移动:2号盘子,x——>z
第3次移动:1号盘子,y——>z
第4次移动:3号盘子,x——>y
第5次移动:1号盘子,z——>x
第6次移动:2号盘子,z——>y
第7次移动:1号盘子,x——>y
第8次移动:4号盘子,x——>z
第9次移动:1号盘子,y——>z
第10次移动:2号盘子,y——>x
第11次移动:1号盘子,z——>x
第12次移动:3号盘子,y——>z
第13次移动:1号盘子,x——>y
第14次移动:2号盘子,x——>z
第15次移动:1号盘子,y——>z

转载于:https://www.cnblogs.com/xleer/p/5302727.html

数据结构(java语言描述)递归实现——汉诺塔问题相关推荐

  1. 数据结构学习笔记:递归和汉诺塔问题

    什么是递归 在数据结构-树中,对于树的遍历采用的是递归来遍历的. 递归就好比套娃,在满足条件的情况下会一直调用本身.问题的求解过程就是划分成许多相同性质的子问题的求解,而小问题的求解过程可以很容易的求 ...

  2. c语言 统计数量用count_C语言编程学习之递归实现汉诺塔图解!还有零基础入门视频~...

    C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...

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

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

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

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

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

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

  6. C语言---移盘子----Hanoi(汉诺)塔问题,显示移动盘子的步骤

    C语言-移盘子----Hanoi(汉诺)塔问题,显示移动盘子的步骤 在学习递归的过程中,Hanoi(汉诺)塔问题是避开不了的,很多新手在这儿一脸懵. 我们先简单介绍一些Hanoi(汉诺)塔问题到底是个 ...

  7. python实现汉诺塔递归经典算法_Python递归实现汉诺塔算法示例

    本文实例讲述了Python递归实现汉诺塔算法.分享给大家供大家参考,具体如下: 最近面试题,面试官让我5分钟实现汉诺塔算法(已然忘记汉诺塔是啥). 痛定思痛,回来查了一下汉诺塔的题目和算法.题干与实现 ...

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

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

  9. 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 ...

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

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

最新文章

  1. C# 如何实现pfx与snk密钥文件的转换
  2. LeetCode:Remove Nth Node From End of List 移除链表倒第n项
  3. JAR包中读取资源文件
  4. iOS中使用图片作为颜色的背景图
  5. 护眼色的RGB值及颜色代码
  6. 桌面虚拟化中VDI和IDV的五大区别
  7. 未来人工智能对人类的影响的利弊
  8. audio标签无法播放amr格式音频解决方案(benz-amr-recorder)
  9. qlaber 中放置图片_我准备了60个案例,教你彻底搞定PPT图片排版!
  10. 从0到1构建大促运营活动
  11. 一起做RGB-D SLAM(3)
  12. 人脸识别解决方案有哪些?
  13. 美化CodeBlocks的主题和字体
  14. 阿里汪学长教导我们说。。。
  15. JRUY-G3交流三相电压继电器
  16. 使用 PspTerminateThreadByPointer 强制结束进程
  17. 将内网服务开放(摆渡、代理)到公网
  18. 氪信科技英才召集令发布,改变世界的技术之路从脚下启程
  19. 如何找到win10的锁屏推送壁纸
  20. 孩子给离世父亲发短信被回复:“我的孩子是最棒的,爸爸也想你”

热门文章

  1. module_param()函数
  2. `ifdef、`else、`endif 用法
  3. 自定义console.log字体样式
  4. CSS属性简写规则详解
  5. 解决在firefox浏览器不支持ajax的transport.responseXml方法问题
  6. 【JavaScript】callee 与 caller
  7. easyui-combobox实现placeholder提示效果
  8. Javascript This 机制
  9. XenServer部署系列之05——虚拟机的创建及复制
  10. Unity3D 游戏开发构架篇 ——输入控制