汉诺塔问题java编程,Java经典编程300例之实例047 汉诺塔问题求解(递归)
实例说明
汉诺塔问题的描述如下:有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 汉诺塔问题求解(递归)相关推荐
- 编写java汽车销售的类_Java经典编程300例之实例062 简单的汽车销售商场(多态)...
实例说明 当顾客在商场购物时,卖家需要根据顾客的需求提取商品.对于汽车销售商场也是如此.用户需要先指定购买的车型,然后商家去提取该车型的汽车.本实例将实现一个简单的汽车销售商场,用来演示多态的用法. ...
- java 习题_java经典选择题100例及答案
下述说法正确的是(). A .a 是整数类型变量,b 是整数类对象.B .a 是整数类对象,b 是整数类型变量. C .a 和b 都是整数类对象并且值相等. D .a 和b 都是整数类型变量并且值相等 ...
- Java:Java常考经典编程例题(二)
第13题: 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 程序分析: 在10万以内判断,先将该数加上100后再开方,再将该数加 ...
- Java面试常考之 单例设计模式(饿汉式单例、 懒汉式单例)
所谓的单例设计指的是一个类只允许产生一个实例化对象. 对于单例设计模式也有两类形式:懒汉式.饿汉式. 饿汉式单例思想: 单例模式:表示任何类的对象有且只有一个. 首先控制对象的产生数量:将构造方法私有 ...
- Py:递归求解汉诺塔,简单的几行编程可以搞定很高层的三柱汉诺塔游戏
Py:递归求解汉诺塔,简单的几行编程可以搞定很高层的三柱汉诺塔游戏 目录 输出结果 核心代码 输出结果 核心代码 def hanoi(n,x,y,z):if n==1:print(x,'--→',z) ...
- java 初级编程题_java基础经典编程题
java基础经典编程题 Monkey_peach代码 package com.sailor.game; /** * 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第 ...
- 编程导师Ivor Horton新作《Java 7入门经典》即将出版
网友戏称:从Java 2 到Java 7,大师Ivor Horton 的照片一直没变啊,还是那么的年轻,确实大师的风采依旧是未变,在我心中,大师也永远年轻! OK,长话短多,也许你没听说过编程导师Iv ...
- 经典编程习题,用Java实现:矩阵转置、最大公约数和最小公倍数、计算自然对数的底e的值、输出1000以内的回文素数、判断两个年份之间的平闰年情况。
经典编程习题,用Java实现 1.矩阵转置 2.最大公约数和最小公倍数 3.计算自然对数的底e的值 4.输出1000以内的回文素数 5.判断两个年份之间的平闰年情况 1.矩阵转置 public cla ...
- java编程源代码_java经典编程300例源代码下载
java经典编程300例源代码是针对java编程的编程源代码.以基础知识为框架,介绍了各部分知识所对应的常用开发实例,并进行了透彻解代码解析和知识扩展4部分,每一部分都进行了细致的说明.__java经 ...
最新文章
- JavaScript9x9乘法表
- Metasploit save命令技巧
- 每日一皮:上线前加了一个小特性,结果......
- php和python交互-浅析PHP与Python进行数据交互
- python词频统计西游记实验报告_Python文本统计功能之西游记用字统计操作示例
- GWR模型报错汇总(arcgis与GWR4)
- 清华姚班毕业的斯坦福博士陈丹琦入选Google AI2021研究学者计划
- ios7禁止屏幕旋转,强制竖屏
- 韦小宝高超的说谎技巧
- 南大地球科学能转计算机类吗,南京大学地球科学系
- ubuntu18.04 升级内核后,进入系统页面卡在“started gnome display manager“的解决方案
- 持NPDP证书在深圳可享受子女入学、医疗保健、安居保障等福利
- Excel·VBA按列拆分工作表、工作簿
- ps后期处理实用技巧2
- 2021全国特种设备-Q2桥式起重机司机模拟考试题库一[安考星]
- matlab polyfit c语言,算法——纯C语言最小二乘法曲线拟合
- Ansible 下载模块get_url、解压缩模块unarchive(学习笔记十五)
- python图像纹理提取_提取图像的颜色、纹理特征(传统算法)
- LOCAL_PRIVILEGED_MODULE 详解(4)
- MathWorks官方MATLAB/Simulink基础入门视频教程 笔记(Simulink基础)
热门文章
- R语言绘制带聚类树的堆叠柱形图
- FM:代谢无机硫化合物的古菌Ferroplasma可介导细胞外电子传递
- 今年1篇Science,2篇NBT,2篇MP,1篇PNAS等11篇文章,遗传发育所白洋组在植物微生物组取得系列进展!
- 一人一天发两篇Science,视频揭秘:植物如何在与病菌的斗争中取胜?
- 微生物组—宏基因组分析专题培训开课啦!
- python使用numpy包编写自定义函数计算MAPE(平均绝对百分比误差)指标mean absolute percentage error (MAPE)、MAPE指标解读、MAPE指标使用的注意事项
- R语言编写自定义函数、创建使用ggplot2生成图标(icon)的主题(theme)函数、使用ggplot2以及自定义的图标主题函数创建箱图(boxplot)图标、ggsave保存图标(png、svg
- python中matplotlib自定义设置图像标题使用的字体类型:获取默认的字体族及字体族中对应的字体、自定义设置图像标题使用的字体类型
- Python使用numpy中trim_zeros函数去除首尾0值的语法
- R语言可视化包ggplot2绘制分组回归线实战(Regression Line by Group)