1. 我们很容易能想到,可以用递归来实现汉诺塔游戏。因为要将n(n>1)个盘子从“源”柱子移到“目标”柱子,我们要先把n-1个盘子从“源”柱子移到“辅助”柱子上,然后把最底下那一个盘子移到目标柱子上,最后把“辅助柱”上的n-1个盘子移动到目标柱子上。n==1时直接移到目标柱上,也是递归的出口。
  2. 有了以上思路的铺垫,就可以开始实现代码了。
  3. public class HanoiDemo {public static int hanoiCalledCount = 0;//成员变量记录操作次数//汉诺塔游戏是一种二路递归public static void main(String[] args) {hanoi(3,"A","B","C");System.out.println("执行"+hanoiCalledCount+"步");}public static void hanoi(int n,String source,String target,String assist){if(n<=0){return ;}if(n==1){//递归的出口,n==1时直接移到目标柱上System.out.printf("把一个盘子从%s柱子上移动到%s柱子上\n",source,target);hanoiCalledCount++;//计数器加一}else{//先把n-1个盘子从“源”柱子移到“辅助”柱子上hanoi(n-1,source,assist,target);//把最底下那一个盘子移到目标柱子上System.out.printf("把一个盘子从%s柱子上移动到%s柱子上\n",source,target);hanoiCalledCount++;//计数器加一//把“辅助柱”上的n-1个盘子移动到目标柱子上hanoi(n-1,assist,target,source);}}
    }

    运行结果如下,大家可以尝试验证一下是否正确。

  4. 当n==2时,要操作3次

当n==3时,要操作7次

当n==4时,要操作15次

相信大家已经猜出规律了,操作次数==n^2-1

可见,随着盘子个数n的增加,操作次数以n^2增加,所以,自己玩汉诺塔游戏的是时候建议数字不要超过20。

java实现汉诺塔游戏(递归)(附超详细易懂注释)相关推荐

  1. 汉诺塔详解(超详细)

    递归算法求汉诺塔(C语言版) 汉诺塔: 梵天创造世界的时候做了三根金刚石柱子,x y z三根柱子 在x柱子上 从上往下按照从小到大顺序摞着64片黄金圆盘. 梵天命令婆罗门把圆盘从x柱移到z柱 并且规定 ...

  2. 要理解递归,得先理解递归--用Java语言由浅入深讲解汉诺塔游戏

    2019独角兽企业重金招聘Python工程师标准>>> 一.递归是什么? 定义:程序调用自身的编程技巧称为递归.它分为调用阶段和回退阶段,递归的回退顺序是它调用顺序的逆序. 递归使用 ...

  3. 【使用递归玩通关汉诺塔游戏】算法01-递归(斐波那契数列、汉罗塔问题)-java实现

    递归 定义:在一个方法(函数)的内部调用该方法(函数)本身的编程方式 简而言之就是 "自己调自己" 在玩游戏之前让我们先对递归有一个简单的了解吧! 5.1 递归简介 递归必须有一个 ...

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

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

  5. 汉诺塔游戏(java)

    大家好,今天我们来解决一个很有意思的游戏:汉诺塔游戏. 先来带大家了解下这个汉诺塔游戏吧! 汉诺塔由来:法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一 ...

  6. 汉诺塔游戏java下载,利用python实现汉诺塔游戏

    本文实例为大家分享了python实现汉诺塔游戏的具体代码,供大家参考,具体内容如下 一.汉诺塔 汉诺塔问题是一个经典的递归问题,对于这个问题,我们可以把它简单的去看成是如何用n-1去表示n. 在A,B ...

  7. python面向过程实践汉诺塔_递归汉诺塔-和递归汉诺塔相关的内容-阿里云开发者社区...

    多柱汉诺塔最优算法设计探究 多柱汉诺塔最优算法设计探究 引言 汉诺塔算法一直是算法设计科目的最具代表性的研究问题,本文关注于如何设计多柱汉诺塔最优算法的探究.最简单的汉诺塔是三个柱子(A.B.C),因 ...

  8. 数据结构与算法—递归算法(从阶乘、斐波那契到汉诺塔的递归图解)

    目录 递归介绍 递归求阶乘 递归求斐波那契 递归解决汉诺塔 总结 递归介绍 递归:就是函数自己调用自己. 子问题须与原始问题为同样的事,或者更为简单: 递归通常可以简单的处理子问题,但是不一定是最好的 ...

  9. 汉诺塔游戏的python实现——递归函数

    汉诺塔游戏python实现 def move(n, a, b, c): if n == 1: print('move', a, '-->', c) else: move(n-1, a, c, b ...

最新文章

  1. windows下搭建hadoop-2.6.0本地idea开发环境
  2. python输出csv文件中文乱码-python读写csv时中文乱码问题解决办法
  3. 多网卡无法上外网的解决
  4. php 判断ajax访问,PHP里判断是否Ajax请求
  5. java id自增_Java分布式自增长ID实现方案
  6. python几个面试题整理
  7. NinePatchChunk.java分析
  8. 高斯克吕格投影与墨卡托投影(通用横轴墨卡托、web墨卡托等)
  9. Abaqus的inp文件详解
  10. mysql5.1免安装版_mysql5.1免安装版配置
  11. Java进阶-面向对象
  12. 计算机总是无法完成更新失败,Win10系统更新失败无法完成更新正在撤销更改的解决方法...
  13. 电话号码归属地批量查询软件选择需谨慎
  14. Max-Min 带宽公平分配算法
  15. Jmeter监控系统资源
  16. c语言精品课程课件,PPT-《C语言程序设计》精品课程.ppt
  17. 西门子1200 总线控制V90伺服程序模板 两种控制模式 1.基于111报文自己编写的PN通讯控制V90伺服程序
  18. 基于OpenCV的简易实时手势识别(含代码)
  19. 项目实训2021.07.02
  20. 腾讯-iOS面试题2面-答案

热门文章

  1. windows11中如何显示此电脑图标
  2. 汽车基础软件「众生相」
  3. 记一个typeorm问题 Main alise is not set
  4. 汉诺塔python创新设计大赛_机械创新设计大赛官网
  5. DS5000神奇的FDE全磁盘加密技术
  6. 一种实用的笑脸检测方法
  7. CUDA学习:Windows下的CUDA环境配置
  8. JavaScript 剪贴板
  9. dw如何导入php站点,Dreamweaver CS6如何导入/导出站点?
  10. java课程设计打字训练测试软件_打字训练测试软件-Java课程设计