/*汉诺塔递归
* 1.将编号0-N-1个圆盘,从A塔座移动到B上面
* 2.将编号N的1个圆盘,从A移动到C上面
* 3.最后将B上面的N-1个圆盘移动到C上面
* 注意:盘子的编号从上到下1-N
* */
public class HannoTower_Recursion { public static void main(String[] args) {
int nDisk = 3;
doTowers(nDisk,'A','B','C'); } private static void doTowers(int topN, char from, char inter, char to) {
if(topN == 1){
//只有一个盘子编号为1,直接从A移动到C上面
System.out.println("Disk 1 " + "from " + from + " to " + to);
}
else{
//将前N-1个盘子从A移动到B---from-->inter
doTowers(topN-1, from, to, inter);
//将第N个盘子从A移动到C---from-->to
System.out.println("Disk " + topN + "from " + from + " to " + to);
//将前N-1个盘子从B移动到C---inter-->to
doTowers(topN-1, inter, from,to );
}
} }
执行过程和结果
Enter(3 disks,A B C)
Enter(2 disks,A,C,B)
Enter(1disk,A B C)
Base case-->disk1 from A---C //Disk 1 from A to C
Return(1disk A B C)
move disk 2 from A--B //Disk 2from A to B
Enter(1disk, C,A,B)
Base case-->disk1 from C---B //Disk 1 from C to B
Return(1disk C A B)
Return(2disk A C B)
move disk 3 from A--C //Disk 3from A to C
Enter(2disk B A C)
Enter(1disk B C A)
Base case-->disk1 from B---A //Disk 1 from B to A
Return(1disk B C A)
move disk 2 from B--C //Disk 2from B to C
Enter(1disk A B C)
Base case-->disk1 from A---C //Disk 1 from A to C
Return(1disk A B C)
Return(2disk B A C)
Return(3 disks,A B C)