用Java解决汉诺塔问题

public static void move(char pos1 ,char pos2) {
        //模拟实现盘子的移动
        //pos1移动到pos2,这里pos1、pos2只是一个代指
        // 比如你想移动A上方的一个盘子到C,你传参就是pos1=A,pos2=B
        System.out.print(pos1+"->"+pos2+" ");
    }

    public static void hanNuoTa(int n,char pos1 ,char pos2,char pos3) {
        //n表示要移动的盘子个数
        //pos1起始位置、pos2中转位置、pos3目标位置
        //因为移动过程中,目标位置、中转位置是会变的
        if(n==1)
        {
            move(pos1,pos3);
        }
        else
        {
            hanNuoTa(n-1,pos1,pos3,pos2);
            //起始位置移动n-1个到中转位置
            move(pos1,pos3);//n-1个移动完,将起始位置最大的1个移动到目标位置
            //问题转换成:pos2是起始位置,pos3目标位置,pos1中转位置,如何将n-1个盘,从pos2移动到pos3
            hanNuoTa(n-1,pos2,pos1,pos3);
        }
    }

    public static void main(String[] args) {
        hanNuoTa(1,'A','B','C');
        System.out.println();
        hanNuoTa(2,'A','B','C');
        System.out.println();
        hanNuoTa(3,'A','B','C');
        System.out.println();
        hanNuoTa(4,'A','B','C');
        System.out.println();
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值