漢諾塔問題的描述是:設有三根標號為A,B,C的柱子上,在A柱上放着n個盤子,每一個都比下面的略小一點,要求把A柱上的盤子全部移動到C柱上,規則是:一次只能移動一個盤子;移動的過程中大盤只能放在小盤下面;在移動過程中盤子可以放在A,B,C的任意一個柱子上。
遞歸方法求解:一個盤子的漢諾塔問題可直接移動(遞歸出口)。n個盤子的漢諾塔問題可遞歸表示為如下的子問題求解的形式,首先把上邊的n-1個盤子從A柱移動到B柱,然后把最下邊的一個盤子從A柱移動到C柱,最后把移到B柱的n-1個盤子再移到C柱。
如下圖所示,n個盤子從上到下標號為1,2,3,4,……,n
1 package tower; 2 3 public class Tower { 4 public static void moveDish(int n, char from, char temp, char to) { 5 if (n == 1) { 6 System.out.println( "1 號 : " +"from " +from +" to "+ to); 7 } else { 8 moveDish(n - 1, from, to, temp); 9 System.out.println(n + " 號 : "+ "from " + from + " to " + to); 10 moveDish(n - 1, temp, from, to); 11 } 12 } 13 14 public static void main(String []args){ 15 moveDish(3, 'A', 'B', 'C'); 16 } 17 }