汉诺塔问题的理解和代码实现

//分为两步
//第一步:把n-1的圆盘从A到B借助C
// 把第n个圆盘从A到C
//第二步:把n-1个圆盘从B到C借助A
//要求n个圆盘的问题,需要先求解 n-1个圆盘的问题(符合迭代的要求)

public class Test42 {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        hanNo hanNo = new hanNo();
        System.out.println("输入圆盘数");
        int n=input.nextInt();
        hanNo.hanoi(n,'A','B','C');
    }
}
class hanNo {
    int m=1;
    //移动方法
    public void move(char N, char M) {
        System.out.println("移动 "+(m++)+"次" + " 从 " + N + " ->移到->  " + M);
    }

    //递归实现汉诺塔的函数
    public void hanoi(int n, char A, char B, char C) {
        if (n == 1)//圆盘只有一个时,只需将其从A塔移到C塔
            move(A, C);//将编b号为1的圆盘从A移到C
        else {//否则
            hanoi(n - 1, A, C, B);//递归,把A塔上编号1~n-1的圆盘移到B上,以C为辅助塔
            move(A, C);//把A塔上编号为n的圆盘移到C上
            hanoi(n - 1, B, A, C);//递归,把B塔上编号1~n-1的圆盘移到C上,以A为辅助塔
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值