汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
public class Hanoitower { static int count = 0; public static void main(String[] args) { hanoiTower(5, 'A', 'B', 'C'); System.out.println(count); } public static void hanoiTower(int num, char a, char b, char c) { count++; // 如果只有一个盘 if (num == 1) { System.out.println("第1个盘从 " + a + "->" + c); } else { //如果是n>=2,我们可以看做两个盘 1、最下边的一个,2.上面所有的; //上边所有的从A移动到B hanoiTower(num - 1, a, c, b); // 把最下边的盘A移动到C System.out.println("第" + num + "个盘从 " + a + "->" + c); //把B塔的所有盘从B移动到C, hanoiTower(num - 1, b, a, 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 31