递归解决汉诺塔问题[Java]

核心思想:前n个要从起点到终点,那要先把前n-1个移到第三点,然后第n个点移到终点,最后前n-1个点从第三点移到终点。(我在a要去c,先把我前面的都移到b,然后我去a,最后n-1个再来c)
例如:第n个要a→c:先让前n-1个都a→b,然后第n个再a→c,最后前n-1个再b→c。 其中前n-1个要a→b:让前n-2个都a→c,第n-1个a→b,前n-2再c→b,以此直到前面只有一个盘子则直接移动再返回。

//移盘子
//第n个在a要去c,先让前n-1个都去b,然后第n个再去a,最后前n-1个再来c
//我在a要去c,先把我前面的都移到b,然后我去a,最后n-1个再来c
public class Hanoi {
    public static void main(String[] args) {
        String x = "x";
        String y = "y";
        String z = "z";
        hanoi(3, x, y, z);
    }

    private static void hanoi(int n, String begin, String mid, String end) {
        if (n == 1){
            System.out.println(begin + "->" + end);
        }else {
            hanoi(n - 1,begin, end, mid);
            System.out.println(begin + "->" + end);
            hanoi(n - 1,mid, begin,end);
        }
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值