终于弄懂了汉诺塔程序是怎么运行的
汉诺塔作为递归算法中老生常谈的问题相信大家都很熟悉了,相信会玩九连环的小伙伴会很轻松的解决此问题,但是其代码实现却是很多人的噩梦。而本人也是在最近弄清了基于汉诺塔的双重递归算法的运行逻辑,所以本片文章重点不会放在汉诺塔问题的解决上面而是分享双重递归算法是如何运行的。
代码实现
/*
函数输入(盘子的个数,初始柱子,中介柱子,目标柱子)
初始的三个盘子从上到下(从小到大)分别为盘子1,盘子2,盘子3
*/
class HanoiTower{
//递归函数
public static void hanoi(int n, char from, char inner, char to){
if(n == 1){
System.out.println("盘子1从柱子" + from + "移动到柱子" + to);
}else{
hanoi(n - 1, from, to, inner);
System.out.println("盘子" + n + "从柱子" + from + "移动到柱子" + to);
hanoi(n - 1, inner, from, to);
}
}
public static void main(String[] args){
//将三个柱子从左到右分别取名为A,B,C
hanoi(3, 'A', 'B', 'C');
}
}
递归程序运行逻辑
上图的最右边的打印结果从上到下依次输出得到如下结果:
盘子1从柱子A移动到柱子C
盘子2从柱子A移动到柱子B
盘子1从柱子C移动到柱子B
盘子3从柱子A移动到柱子C
盘子1从柱子B移动到柱子A
盘子2从柱子B移动到柱子C
盘子1从柱子A移动到柱子C
[1]: Robert Lafore. Java数据结构和算法(第二版)[M]. 2004,02.