汉诺塔问题(递归实现)

古代有一个梵塔,塔内有三个座A、B、C,A座上有64个盘子,盘子大小 不等,大的在下,小的在上(如图)。有一个和尚想把这64个盘子从A座移 到C座,但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘子 始终保持大盘在下,小盘在上。在移动过程中可以利用B座,要求输出移动 的步骤。

import java.util.Scanner;

public class Main {
    static int i = 1;

    public static void Haoni(int n ,char from,char mid,char to){
        if ( n == 1){
            move(1,from,to);
        }else{
            Haoni(n-1, from, to , mid);
            move(n, from,to);
            Haoni(n-1, mid , from , to);
        }
    }

    public static void move(int n ,char from,char to){
        System.out.printf("第%d步:将%d号盘子%c---->%c\n",i++,n,from,to);
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in = new Scanner(System.in);
        int num = in.nextInt();
        Haoni(num, 'A', 'B', 'C');
        in.close();
    }

}

    **递归的作用**
    1) 替代多重循环 
    2) 解决本来就是用递归形式定义的问题 
    3) 将问题分解为规模更小的子问题进行求解 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

daipuweiai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值