漢諾塔問題遞歸算法的設計

 漢諾塔問題的描述是:設有三根標號爲A,B,C的柱子上,在A柱上放着n個盤子,每個都比下面的略小一點,要求把A柱上的盤子所有移動到C柱上,規則是:一次只能移動一個盤子;移動的過程當中大盤只能放在小盤下面;在移動過程當中盤子能夠放在A,B,C的任意一個柱子上。spa

遞歸方法求解:一個盤子的漢諾塔問題可直接移動(遞歸出口)。n個盤子的漢諾塔問題可遞歸表示爲以下的子問題求解的形式,首先把上邊的n-1個盤子從A柱移動到B柱,而後把最下邊的一個盤子從A柱移動到C柱,最後把移到B柱的n-1個盤子再移到C柱。code

以下圖所示,n個盤子從上到下標號爲1,2,3,4,……,nblog

 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 }

 

相關文章
相關標籤/搜索