理解汉诺塔递归
三个盘子的汉诺塔你总会吧:
文章图片
文章图片
【理解汉诺塔递归】然后你移完发现左边柱子下面又蹦出来一个盘子
文章图片
好吧, 那就把中间的柱子看成目标柱
文章图片
然后把最大的移到右边, 然后就和搬三个一模一样了
文章图片
更多的话也是一样的...
文章图片
把a上面n-1个盘子看做一个整体,这样a上面就剩下两个盘子了,(n,n-1)
- 把n-1个整体借助于c先移动到c
- 把第n个移动到c
- 把b上面的n-1个盘子借助于a移动到c
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);
}
}
推荐阅读
- 深入理解Go之generate
- 考研英语阅读终极解决方案——阅读理解如何巧拿高分
- 由浅入深理解AOP
- 逻辑回归的理解与python示例
- 「按键精灵安卓版」关于全分辨率脚本的一些理解(非游戏app)
- 深入理解|深入理解 Android 9.0 Crash 机制(二)
- 不理解句意,你还想做对所有GRE填空题()
- 如何理解“超我、自我、本我”
- 十一、理解纹理坐标
- 复盘学习《通往财富自由之路》专栏——“我们重新理解了付费”