汉诺塔问题 Java实现

汉诺塔问题是递归中非常经典的入门问题。

问题情景

假设存在带圆孔的圆饼积木,积木半径为1,2,3,4,......,同一半径只存在一个积木,积木可放在三座塔上,但是积木必需按照半径,由长到短,依次从低到高放置。积木在塔间移动时每次只能移动一块积木。

以下时Java的代码实现:

import java.util.Scanner;

public class Hanoio {
    int sum=0;
    public int hansum(int n,char a,char b,char c){

        if(n>1){
            hansum(n-1,a,c,b);
            System.out.print("积木编号"+n+"现在将从"+a+"座移到"+b+"座\n");
            this.sum++;
            hansum(n-1,c,b,a);
        }else {

            System.out.print("积木编号1现在将从"+a+"座移到"+b+"座\n");
            this.sum++;
        }

        return this.sum;
    }
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入初始积木数量:");
        int n=scanner.nextInt();
        Hanoio hanoio=new Hanoio();
        System.out.print("\n");
        int c=hanoio.hansum(n,'A','B','C');
        System.out.print(c);
    }
}

效果图:

请输入初始积木数量:3

积木编号1现在将从A座移到B座
积木编号2现在将从A座移到C座
积木编号1现在将从B座移到C座
积木编号3现在将从A座移到B座
积木编号1现在将从C座移到A座
积木编号2现在将从C座移到B座
积木编号1现在将从A座移到B座
7
Process finished with exit code 0

后续问题:则么显示每次移动后三个塔的状态呢?

                   当输入数字变大计算机就带不动了!如果但要求得到移动步数,算法如何该进会好一些。     

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值