【Java SE】汉罗塔

🥰🥰🥰来都来了,不妨点个关注叭!
👉博客主页:欢迎各位大佬!👈

在这里插入图片描述
上期内容,讲解有关递归的知识,这期我们来看看一个经典的题目吧!让我们更进一步了解递归。

1. 汉罗塔规则介绍

1> 有三根相邻的柱子,标号为A,B,C。
2> A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘。
3> 现在把所有盘子一个一个移动到柱子B上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方。
4>最后全部移动到C上面即完成
在这里插入图片描述
具体实现步骤在A杆上,1个盘子、2个盘子、3个盘子
在这里插入图片描述
下面具体演示3个盘子在A杆按照规则移动到C杆上面的的情况
在这里插入图片描述
假设有n个盘子,则操作2^n-1

2.具体分析实现

pos1:起始位置
pos2:中转位置,借助位置
pos3:最终位置
1个盘子:直接从A->C
多个盘子,我们观察得到,先将【n-1】个盘子移动到B,再将A上最后一个盘子移动到C上,最后将【n-1】个在B上的盘子移动到C上,则完成。
3个盘子的情况:
在这里插入图片描述
4个盘子的情况
在这里插入图片描述
即我们可以实现递归的思想

如果是1个盘子 pos1->pos3
如果是n个盘子 hanoi(n-1,pos1,pos3,pos2)【n-1】个盘子从A(pos1)借助C(pos3)移动到最后位置B(pos2)
接着hanoi(n-1,pos2,pos1,pos3)【n-1】个盘子从B(pos2)借助A(pos1)移动到最后位置C(pos1)
则完成

最后打印出来,具体实现代码如下

3.代码实现

public class Hanoi {
        public static void hanoi(int n,char pos1,char pos2,char pos3) {
            if(n == 1) {
                move(pos1,pos3);
                return;
            }
            hanoi(n-1,pos1,pos3,pos2);
            move(pos1,pos3);
            hanoi(n-1,pos2,pos1,pos3);
        }
        //从某一个位置移动到某一个位置
        public static void move(char pos1,char pos2) {
            System.out.println(pos1 + "->" + pos2);
        }

        public static void main(String[] arg) {
            hanoi(1,'A','B','C'); //并不是代表pos1就是A,pos2就是B,pos3就是C,只是传参的初始值
            System.out.println();
            hanoi(2,'A','B','C');
            System.out.println();
            hanoi(3,'A','B','C');
            System.out.println();
        }
    }

本期内容到这里结束啦!有没有弄清汉罗塔问题呢!自己要多动手敲敲哦!多思考,勤动手,胜利就在前方~加油,下期见!

  • 15
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值