汉若塔问题(基础汉若塔)——java实现

汉诺(Hanoi)塔问题:

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

    这个问题需要用到递归的思想,直接上代码,代码里每句我都加入了详细解释,有问题可以留言。

HanoiTower类:

public class HanoiTower {
	//N个盘子从A经过B移动到C
	//标记盘子从小到大 1——>n号
	public static void moveTower(int n,char A,char B,char C) {
		//如果只有1个盘子,直接从A移动到C
		if(n == 1) {
			System.out.println("盘1从"+ A + "移动到" + C);
		}
		else {
			//否则上面n-1个盘子通过C移动到B柱子上
			moveTower(n - 1, A, C, B);
			//然后把第n个盘子直接从A移到C柱上
			System.out.println("盘" + n + "从" + A + "移动到" + C);
			//再把其余移到B上的盘子通过A移动到C上,就完成了
			moveTower(n - 1, B, A, C);
			//通过递归,传入的n会逐渐减少,ABC对应的位置也会不断变化,最终化解为移动一个盘子
		}
	}
} 

Test类:

public class test {
	public static void main(String[] args) {
		HanoiTower.moveTower(5,'A','B','C');
	}
}

运行的结果:

盘1从A移动到C
盘2从A移动到B
盘1从C移动到B
盘3从A移动到C
盘1从B移动到A
盘2从B移动到C
盘1从A移动到C
盘4从A移动到B
盘1从C移动到B
盘2从C移动到A
盘1从B移动到A
盘3从C移动到B
盘1从A移动到C
盘2从A移动到B
盘1从C移动到B
盘5从A移动到C
盘1从B移动到A
盘2从B移动到C
盘1从A移动到C
盘3从B移动到A
盘1从C移动到B
盘2从C移动到A
盘1从B移动到A
盘4从B移动到C
盘1从A移动到C
盘2从A移动到B
盘1从C移动到B
盘3从A移动到C
盘1从B移动到A
盘2从B移动到C
盘1从A移动到C


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值