java递归实现汉诺塔

public class HanNuoTa {
    public static void main(String[] args) {
        hanoi(3, 'a', 'b', 'c');
    }

    //num表示多少个盘子,begin起始柱,middle中转柱,end终点柱
    public static void hanoi(int num, char begin, char middle, char end) {
        //num等于1,当前柱子上剩最后一个盘子,直接移动到终点柱子
        if (num == 1) {
            System.out.println(begin + "-->" + end);
        } else {
            //num-1代表减去最下面一个盘子后上面的盘子,看作一个整体,移到中转柱子。
            //全部移到中转柱子后才可以吧最下面的移到终点柱子
            //此时begin装的是a,end装的是c,middle装的是b
            hanoi(num - 1, begin, end, middle);

            // a c b 传到 hanoi(begin middle end)
            // 其值为             a     c      b
            System.out.println(begin + "-->" + end);//因此输出结果为 a --> b

            //此时起始柱子最底盘以上的盘子全部转到中转柱,起始柱里的最底盘又转到终点柱子
            // 此时的起始柱子没有盘子,终点柱子有一个转成功的盘子
            //中转柱子此时变成了起始柱子,需将原本的起始柱子当做中转柱子,终点柱子不变
            hanoi(num - 1, middle, begin, end);
        }
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值