java 汉诺塔 递归算法
一、玩法
1.有三根杆子A,B,C。A杆上有若干碟子
2.每次移动一块碟子,小的只能叠在大的上面
3.把所有碟子从A杆全部移到C杆上
二、解答思路
这是一个典型的递归场景的应用
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 // n- 要移动的碟数 2 // a- 移动杆,b- 借助杆,c- 目标杆 3 public static hanoi(int n,String a ,String b,String c) { 4 if(n == 1) { 5 System.out.println(a + "--->" + c); 6 } else { 7 hanoi(n-1,a,c,b); 8 System.out.println(a + "--->" + c); 9 hanoi(n-1,b,a,c); 10 } 11 }
1、若A杆上只有一个碟子,直接移动到C
if(n==1) { System.out.println(a + '--->' + c); }
2、若A杆上碟子数为n(n>1),分“三步走”
2.1、将A杆上n-1个碟子借助C移动到B
hanoi(n-1,a,c,b)
2.2、将A杆上最后一个移动到C
System.out.println(a + "--->" + c)
2.3、将B杆上的n-1个碟借助A移动到C
hanoi(n-1,b,a,c)