JAVA实现汉诺塔问题

汉诺塔是递归思想中的一道经典例题,电影《猩球崛起》中就有描写汉诺塔。

汉诺塔问题就是有三个柱子,我们设为A,B,C,如图现在A上有一些大小不一盘子,盘子由大到小自下而上放置,要将A上的盘子转移到C上,并且大盘子一定要在小盘子下面。

现在假设A上有3个盘子我们要将A上的盘子放到C上,要先将A最小的盘子盘子放到C,然后将A中间的盘子放到B,再将C的盘子放到B上,把A最大的一个盘子移到C,把B最上的盘子放到A,把B上的放到C,最后将A上盘子移到C,就完成交换。用图解释如下有了3个盘子的经验,可以得到将第n-1个盘子放到B上,再将第n个盘子移到C上,就有最终代码:

static void sr(char p1,char p2){//实现将一个盘子移向另一个盘子的方法
        
          System.out.println(p1+"->"+p2);
    }

    static void Hnt(int i,char p1,char p2,char p3){//实现汉诺塔的方法
        if(i==1){
            sr(p1,p3);
        }else{
            Hnt(i-1,p1,p3,p2);//将n-1个盘子从A移向C后移向B

            sr(p1,p3);//将第n个判子移向C

            Hnt(i-1,p2,p1,p3);//把n-1个盘子由B向A再向C
        }

    }
    public static void main(String[] args) {
        Hnt(3,'A','B','C');
    }

最终3个盘子的效果为

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值