汉诺塔

汉诺塔问题大家都知道是什么情况,题目描述就没什么好说的了

关键点:如何拆分子问题

1. 我们可以把题目抽象成这样:借助B,将A的块移动到C上

2. 我们可以认识到这样一个问题,最大的块(蓝色)其实是可以从问题中暂时摘除的,因为它在哪都是处于最底层,它上面可以放任何块,它和底座没啥区别。

3. 理解这样一个过程:把红色块和橙色块借助C移动到B,该过程和我们的整体过程是一致的,只是规模较小

4. 上述过程完成后,就只剩把蓝色块再移动到C了

 

5. 而当蓝色块移动完成后,根据2中的描述,我们可以认为蓝色块已经可以退出这个舞台了,接下来的问题就是把红色、橙色块借助A移动到C,这就是原问题的N-1的规模

 

 

代码也非常简单
public static void hanoi(int n,char a, char b, char c) {
        if (n == 1) {
            System.out.println(a+"-->"+c);
            return;
        }
        hanoi(n-1,a,c,b);
        System.out.println(a+"-->"+c);
        hanoi(n-1,b,a,c);
    }
输出:
a-->c
a-->b
c-->b
a-->c
b-->a
b-->c
a-->c

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值