汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。[1]
privatestaticvoidleftToMid(int n) { if (n == 1) { System.out.println("move" + n + "left to mid"); return; } leftToRight(n - 1);//都是一样的 System.out.println("move" + n + "left to mid"); rightToMid(n - 1);//完成整个过程 }
privatestaticvoidrightToMid(int n) { if (n == 1) { System.out.println("move" + n + "right to mid"); return; }
rightToLeft(n - 1);//都是一样的 System.out.println("move" + n + "right to mid"); leftToMid(n - 1);//完成整个过程 }
其它的从左从中间。。。我想应该不用我写了把(才不是我懒o(^▽^)o)
但这么长显然代码并不好看,而且能发现递归过程有大量共性,考虑优化一下
将当前位置和目标位置抽象出来
1 2 3 4 5 6 7 8 9 10
//当前位置和目标位置 还有剩余位置抽象出来 staticvoidfromTo(String from, String other, String to, int n) { if (n == 1) { System.out.println("move" + n + from + " to " + to); return; } fromTo(from, to, other, n - 1);//other 和 to交换位置 代表当前圆盘的上面的圆盘移到剩余位置 System.out.println("move" + n + from + " to " + to); fromTo(other, from, to, n - 1);//代表当前圆盘的上面的圆盘移到目标位置 }