java递归实现汉诺塔步骤介绍
作者:zzz45611 时间:2022-03-03 09:44:17
汉诺塔的规则是:一共三根柱子,一根柱子从上到下套着有小到大的若干个圆盘,要将所有圆盘按照这个排放顺序移动到第三根柱子上,并且每次只能移动一个圆盘.
可以将整个过程分为三个步骤来看:
第一步:将除最大圆盘外的n-1个圆盘移动辅助柱子上
第二步:将最大的圆盘移动到目标柱子
第三步:将n-1个圆盘从辅助柱子移动到目标柱子
其中第一步又可以拆成一模一样的三步,可以看成一个n-1层的塔要移动到目标柱子,只不过目标柱子换了一个:
第三步也可以拆分成一模一样的三步:
多拆几次就会发现规律:第一步和第三步无论如何拆成更小的汉诺塔,都只是目标柱和辅助柱发生调换,其他部分都是一模一样.所以我们将第一步和第三步进行递归运算就可以解决汉诺塔问题.
static void hanNuo(int n,String A,String B,String C){
if (n==1){
System.out.println("把第"+n+"个从"+A+"移动到"+C);
}else {
hanNuo(n-1,A,C,B);
System.out.println("把第"+n+"个从"+A+"移动到"+C);
hanNuo(n-1,B,A,C);
}
}
每进入一次递归塔的层数减一 ,由于第一步和第三步每拆分一次目标塔和辅助塔就会互换,同理,每进入一次递归也会将两个塔互换,因为第一步拆分目标塔是在塔二和塔三之间循环,所以我们在进入递归时也将传入代表"塔二"和"塔三"的参数互换,同理第三步也将互换代表"塔一"和"塔二"的参数.
方法中的第二步由于第一步已经递归完成,所以可以直接使用打印语句进行输出.
来源:https://blog.csdn.net/zzz45611/article/details/122380248
标签:java,汉诺塔
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
永久解决idea git log乱码的问题
2022-01-10 06:13:13
![](https://img.aspxhome.com/file/2023/4/63434_0s.jpg)
android TextView设置中文字体加粗实现方法
2023-08-06 02:32:03
java中的this引用及对象构造初始化
2023-03-07 09:38:17
![](https://img.aspxhome.com/file/2023/6/60996_0s.png)
详解Java代码常见优化方案
2023-11-29 03:13:04
Java算法实战之排一亿个随机数
2022-11-22 02:47:26
![](https://img.aspxhome.com/file/2023/4/60694_0s.png)
MyBatis-Plus联表查询以及分页代码实例
2023-11-26 01:51:32
![](https://img.aspxhome.com/file/2023/8/60028_0s.png)
基于Idea+Jconsole实现线程监控步骤
2021-07-29 10:39:40
![](https://img.aspxhome.com/file/2023/4/61824_0s.png)
Java中List使用stream流转成map的几种方式详解
2022-07-31 21:46:12
Spring Cloud Ribbon配置详解
2023-11-25 01:32:50
Spring中自定义数据类型转换的方法详解
2022-10-09 02:56:51
spring boot如何实现切割分片上传
2023-06-29 02:49:26
![](https://img.aspxhome.com/file/2023/7/57487_0s.png)
java集合Collection实现类解析ArrayList LinkedList及Vector
2022-05-01 05:44:12
![](https://img.aspxhome.com/file/2023/6/61956_0s.png)
java.math.BigDecimal的用法及加减乘除计算
2022-01-15 15:55:20
SpringBoot参数校验Validator框架详解
2023-09-22 07:08:40
Spring Boot整合流控组件Sentinel的场景分析
2023-06-22 19:27:53
![](https://img.aspxhome.com/file/2023/0/57600_0s.jpg)
Java程序图形用户界面设计之按钮与布局
2023-07-18 07:03:21
![](https://img.aspxhome.com/file/2023/2/61572_0s.png)
java 单例的五种实现方式及其性能分析
2023-05-10 10:50:51
![](https://img.aspxhome.com/file/2023/9/63319_0s.png)
C++ lambda函数详解
2023-06-20 07:49:43
C++语言io流处理基本操作教程示例
2023-11-02 22:07:39
![](https://img.aspxhome.com/file/2023/8/107388_0s.png)
浅谈自定义校验注解ConstraintValidator
2023-07-06 03:10:53
![](https://img.aspxhome.com/file/2023/9/61529_0s.jpg)