Open Source, Open Future!
  menu
107 文章
ღゝ◡╹)ノ❤️

汉诺塔问题

简介

法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。

image.png

代码

/** * @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 -1n为圆盘的个数)