三个盘子的汉诺塔你总会吧:


然后你移完发现左边柱子下面又蹦出来一个盘子

好吧, 那就把中间的柱子看成目标柱

然后把最大的移到右边, 然后就和搬三个一模一样了

更多的话也是一样的...

把a上面n-1个盘子看做一个整体,这样a上面就剩下两个盘子了,(n,n-1)
- 把n-1个整体借助于c先移动到c
- 把第n个移动到c
- 把b上面的n-1个盘子借助于a移动到c
Java代码就是
public static void hanoi(int n, char a, char b, char c) {
if (n == 1) {
//如果只剩下一个盘子,直接从a移动到c
System.out.println("Move " + n + " from " + a + " to " + c);
} else {
//把n-1个盘子从a移动到b借助于c
hanoi(n - 1, a, c, b);
//把第n个盘子从a移动到c
System.out.println("Move " + n + " from " + a + " to " + c);
//把n-1个盘子从b移动到c借助于a
hanoi(n - 1, b, a, c);
}
}
网友评论