【算术】 河内塔需要多少步

题目描述

河内塔(又称汉诺塔)问题,就是在一块木板上有三个立柱,在柱A上放着三个圆盘,小的在上面,大的在下面(初始状态)。让被试将在柱1上的三个圆盘移到柱C上面(目标状态)。条件是:每次只能移动任何一个柱子上面的一个圆盘,但大的圆盘不能放在小的圆盘上。

解题思路

柱A是起点,柱C是终点,柱B作为辅助。

  • 一个圆盘时,A到C
  • 二个圆盘时,A到B,A到C,B到C
  • 三个圆盘时,先将A的上两个圆盘移到B,再A最后圆盘到C,然后B两个圆盘到C
  • 四个圆盘时,步骤同上先移三个圆盘到B,再A最后圆盘到C,最后B三个圆盘到C
  • …一次类推,每次只能借助辅助柱处理最上两个,如是循环。
  • 所以依靠递归来解决。

代码

public class Project004 {
    public static void main(String[] args) {
            char A = 'A',B = 'B',C = 'C';
        int total = hanoi(4, A, B, C);
        System.out.println("总步数:"+total);
    }

    /**
     *
     * @param n 盘子数
     * @param A 起点
     * @param B 辅助
     * @param C 终点
     */
    static int sum = 0;//总步数
    public static int hanoi(int n,char A,char B,char C){
        if(n == 1){
            sum ++;
            System.out.println("第"+sum+"步:"+A +" --> "+C);
        }else{
            /*A上n-1个*/
            hanoi(n-1,A,C,B);

            hanoi(n-1,B,A,C);
            sum ++;
            System.out.println("第"+sum+"步:"+A +" ---> "+C);
        }
        return sum;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值