简介
法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。
代码
/**
* @param num 有多少个圆盘
*/
public static void hanoiTower(int num) {
hanoiTower(num, 'A', 'B', 'C');
}
/**
* 圆盘从a塔移动到c塔(b塔作为辅助)
*
* @param num 有多少个圆盘
*/
private static void hanoiTower(int num, char a, char b, char c) {
if (num == 1) {
System.out.println(a + "->" + c);
} else {
// a->b
hanoiTower(num - 1, a, c, b);
// a->c
System.out.println(a + "->" + c);
// b->c
hanoiTower(num - 1, b, a, c);
}
}
测试
public static void main(String[] args) {
System.out.println("移动步骤如下:");
hanoiTower(3);
}
输出如下:
移动步骤如下: A->C A->B C->B A->C B->A B->C A->C
需要移动的步数为2^n -1
(n
为圆盘的个数)