1 /*汉诺塔递归2 * 1.将编号0-N-1个圆盘,从A塔座移动到B上面3 * 2.将编号N的1个圆盘,从A移动到C上面4 * 3.最后将B上面的N-1个圆盘移动到C上面5 * 注意:盘子的编号从上到下1-N6 **/
7 public classHannoTower_Recursion {8
9 public static voidmain(String[] args) {10 int nDisk = 3;11 doTowers(nDisk,'A','B','C');12
13 }14
15 private static void doTowers(int topN, char from, char inter, charto) {16 if(topN == 1){17 //只有一个盘子编号为1,直接从A移动到C上面
18 System.out.println("Disk 1 " + "from " + from + " to " +to);19 }20 else{21 //将前N-1个盘子从A移动到B---from-->inter
22 doTowers(topN-1, from, to, inter);23 //将第N个盘子从A移动到C---from-->to
24 System.out.println("Disk " + topN + "from " + from + " to " +to);25 //将前N-1个盘子从B移动到C---inter-->to
26 doTowers(topN-1, inter, from,to );27 }28 }29
30 }
执行过程和结果
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)