实例说明

汉诺塔问题的描述如下:有A、B和C 3跟柱子,在A上从下往上按照从小到大的顺序放着64个圆盘,以B为中介,把盘子全部移动到C上。移动过程中,要求任意盘子的下面要么没有盘子,要么只能有比它大的盘子。本实例将演示如何求解3阶汉诺塔问题。

实现过程

新建类文件,名称为HanoiTower。在HanoiTower类中定义了一个moveDish()方法,它使用递归算法完成汉诺塔问题的求解;一个main()方法用于测试。

HanoiTower.java 源代码如下:

public class HanoiTower {

public static void moveDish(int level, char from, char inter, char to) {

if (level == 1) {

System.out.println("从" + from + " 移动盘子" + level + " 号到" + to);

} else {

moveDish(level - 1, from, to, inter);

System.out.println("从" + from + " 移动盘子" + level + " 号到" + to);

moveDish(level - 1, inter, from, to);

}

}

public static void main(String[] args) {

int nDisks = 3;

moveDish(nDisks, 'A', 'B', 'C');

}

}

编译运行

$ javac HanoiTower.java

$ java HanoiTower

从A 移动盘子1 号到C

从A 移动盘子2 号到B

从C 移动盘子1 号到B

从A 移动盘子3 号到C

从B 移动盘子1 号到A

从B 移动盘子2 号到C

从A 移动盘子1 号到C

技术要点

为了将N个盘子从A移动到C,需要先将第N个盘子上面的N-1个盘子移动到B上,这样才能将第N个盘子移动到C上。同理,为了将第N-1个盘子从B移动到C上,需要将N-2个盘子移动到A上,这样才能将第N-1个盘子移动到C上。通过递归就可以实现汉诺塔问题的求解。

汉诺塔问题java编程,Java经典编程300例之实例047 汉诺塔问题求解(递归)相关推荐

  1. 编写java汽车销售的类_Java经典编程300例之实例062 简单的汽车销售商场(多态)...

    实例说明 当顾客在商场购物时,卖家需要根据顾客的需求提取商品.对于汽车销售商场也是如此.用户需要先指定购买的车型,然后商家去提取该车型的汽车.本实例将实现一个简单的汽车销售商场,用来演示多态的用法. ...

  2. java 习题_java经典选择题100例及答案

    下述说法正确的是(). A .a 是整数类型变量,b 是整数类对象.B .a 是整数类对象,b 是整数类型变量. C .a 和b 都是整数类对象并且值相等. D .a 和b 都是整数类型变量并且值相等 ...

  3. Java:Java常考经典编程例题(二)

    第13题:        一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 程序分析:        在10万以内判断,先将该数加上100后再开方,再将该数加 ...

  4. Java面试常考之 单例设计模式(饿汉式单例、 懒汉式单例)

    所谓的单例设计指的是一个类只允许产生一个实例化对象. 对于单例设计模式也有两类形式:懒汉式.饿汉式. 饿汉式单例思想: 单例模式:表示任何类的对象有且只有一个. 首先控制对象的产生数量:将构造方法私有 ...

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

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

  6. java 初级编程题_java基础经典编程题

    java基础经典编程题 Monkey_peach代码 package com.sailor.game; /** * 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第 ...

  7. 编程导师Ivor Horton新作《Java 7入门经典》即将出版

    网友戏称:从Java 2 到Java 7,大师Ivor Horton 的照片一直没变啊,还是那么的年轻,确实大师的风采依旧是未变,在我心中,大师也永远年轻! OK,长话短多,也许你没听说过编程导师Iv ...

  8. 经典编程习题,用Java实现:矩阵转置、最大公约数和最小公倍数、计算自然对数的底e的值、输出1000以内的回文素数、判断两个年份之间的平闰年情况。

    经典编程习题,用Java实现 1.矩阵转置 2.最大公约数和最小公倍数 3.计算自然对数的底e的值 4.输出1000以内的回文素数 5.判断两个年份之间的平闰年情况 1.矩阵转置 public cla ...

  9. java编程源代码_java经典编程300例源代码下载

    java经典编程300例源代码是针对java编程的编程源代码.以基础知识为框架,介绍了各部分知识所对应的常用开发实例,并进行了透彻解代码解析和知识扩展4部分,每一部分都进行了细致的说明.__java经 ...

最新文章

  1. JavaScript9x9乘法表
  2. Metasploit save命令技巧
  3. 每日一皮:上线前加了一个小特性,结果......
  4. php和python交互-浅析PHP与Python进行数据交互
  5. python词频统计西游记实验报告_Python文本统计功能之西游记用字统计操作示例
  6. GWR模型报错汇总(arcgis与GWR4)
  7. 清华姚班毕业的斯坦福博士陈丹琦入选Google AI2021研究学者计划
  8. ios7禁止屏幕旋转,强制竖屏
  9. 韦小宝高超的说谎技巧
  10. 南大地球科学能转计算机类吗,南京大学地球科学系
  11. ubuntu18.04 升级内核后,进入系统页面卡在“started gnome display manager“的解决方案
  12. 持NPDP证书在深圳可享受子女入学、医疗保健、安居保障等福利
  13. Excel·VBA按列拆分工作表、工作簿
  14. ps后期处理实用技巧2
  15. 2021全国特种设备-Q2桥式起重机司机模拟考试题库一[安考星]
  16. matlab polyfit c语言,算法——纯C语言最小二乘法曲线拟合
  17. Ansible 下载模块get_url、解压缩模块unarchive(学习笔记十五)
  18. python图像纹理提取_提取图像的颜色、纹理特征(传统算法)
  19. LOCAL_PRIVILEGED_MODULE 详解(4)
  20. MathWorks官方MATLAB/Simulink基础入门视频教程 笔记(Simulink基础)

热门文章

  1. R语言绘制带聚类树的堆叠柱形图
  2. FM:代谢无机硫化合物的古菌Ferroplasma可介导细胞外电子传递
  3. 今年1篇Science,2篇NBT,2篇MP,1篇PNAS等11篇文章,遗传发育所白洋组在植物微生物组取得系列进展!
  4. 一人一天发两篇Science,视频揭秘:植物如何在与病菌的斗争中取胜?
  5. 微生物组—宏基因组分析专题培训开课啦!
  6. python使用numpy包编写自定义函数计算MAPE(平均绝对百分比误差)指标mean absolute percentage error (MAPE)、MAPE指标解读、MAPE指标使用的注意事项
  7. R语言编写自定义函数、创建使用ggplot2生成图标(icon)的主题(theme)函数、使用ggplot2以及自定义的图标主题函数创建箱图(boxplot)图标、ggsave保存图标(png、svg
  8. python中matplotlib自定义设置图像标题使用的字体类型:获取默认的字体族及字体族中对应的字体、自定义设置图像标题使用的字体类型
  9. Python使用numpy中trim_zeros函数去除首尾0值的语法
  10. R语言可视化包ggplot2绘制分组回归线实战(Regression Line by Group)