java解决汉诺塔问题

汉诺塔定义

汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

前言

如果考虑一下把64片金片,由一根针上移到另一根针上,并且始终保持上小下大的顺序。这需要多少次移动呢?
如果考虑一下把64片金片,由一根针上移到另一根针上,并且始终保持上小下大的顺序。这需要多少次移动呢
需要移动 18446744073709551615 次
这表明移完这些金片需要5845.42亿年以上,而地球存在至今不过45亿年,太阳系的预期寿命据说也就是数百亿年。真的过了5845.42亿年,不说太阳系和银河系,至少地球上的一切生命,连同梵塔、庙宇等,都早已经灰飞烟灭。

在这里插入图片描述

分析

1)可以把看门看成两个盘子,最下面一个和上面所有
2)如果有一个盘子,从 A 移动到 C即可
否则
3)把 A 除最下面的盘移动到 B,借助 C
4)把 A 最下面的盘移动到 C
5)把 B 所有盘移动到 C
上面步骤即完成了这个问题

代码实现

// 汉诺塔
public class HanoiTower {

	public static void main(String[] args) {

		Tower t = new Tower();
		t.move(5,'A','B','C'); 

	}
}

class Tower {
		// num为盘子数,a、b、c、分别为柱子
	public void move(int num,char a,char b,char c) {
		// 如果只有一个盘子
		if (num == 1) {
			System.out.println(a + "->" + c);
		} else {
			// 可以看成两个盘子,最下面一个和上面所有 ,即 (num - 1)
			// (1) 先把上面所有盘子移动到 b ,借助 c
			move(num - 1,a , c , b);
			// (2) 把 a 最下面的盘子移动到 c
			System.out.println(a + "->" + c);
			// (3) 把 b 全部盘移动到 c 借助 a
			move(num - 1,b , a, c);
		}
	}
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值