程序調用自身的編程技巧稱爲遞歸(recursion)。 遞歸作爲一種算法在程序設計語言中普遍應用。 一個過程或函數在其定義或說明中有直接或間接調用自身的一種方法, 它一般把一個大型複雜的問題層層轉化爲一個與原問題類似的規模較小的問題來求解, 遞歸策略只需少許的程序就可描述出解題過程所須要的屢次重複計算,大大地減小了程序的代碼量。 遞歸的能力在於用有限的語句來定義對象的無限集合。 通常來講,遞歸須要有邊界條件、遞歸前進段和遞歸返回段。 當邊界條件不知足時,遞歸前進;當邊界條件知足時,遞歸返回。java
''' fun( 3 ) '''算法
需求:編程
A 放入 N 個盤子,而且盤子在柱子中從大到小依次向上小盤子不能在大盤子上,求把 A 中的盤子移到 C 中最少移動幾回,如何移動。注意每次只能一個 。函數
分析:源碼分析
漢諾塔問題就是把A柱上的N-1個盤子通過C移動到B,再把A上的最大的盤子移到C,而B上的N-1再相似上述步驟遞歸循環移到C上。動畫
動畫演示:spa
上代碼:設計
private void move(String a,String c){
System.out.println("從" + a + "到" + c);
}
public void hanoi(int n ,String a,String b,String c){
if(n == 1){
move(a,c);
}else{
hanoi(n-1,a,c,b);
move(a,c);
hanoi(n-1,b,a,c);
}
}
複製代碼