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


 漢諾塔問題的描述是:設有三根標號為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 }

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM