從零開始學資料結構和演算法(三)棧與棧的應用
程式呼叫自身的程式設計技巧稱為遞迴(recursion)。 遞迴做為一種演算法在程式設計語言中廣泛應用。 一個過程或函式在其定義或說明中有直接或間接呼叫自身的一種方法, 它通常把一個大型複雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解, 遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算,大大地減少了程式的程式碼量。 遞迴的能力在於用有限的語句來定義物件的無限集合。 一般來說,遞迴需要有邊界條件、遞迴前進段和遞迴返回段。 當邊界條件不滿足時,遞迴前進;當邊界條件滿足時,遞迴返回。
執行特點
''' fun( 3 ) '''

經典遞迴演算法 - 漢羅塔演算法
需求:
A 放入 N 個盤子,並且盤子在柱子中從大到小依次向上小盤子不能在大盤子上,求把 A 中的盤子移到 C 中最少移動幾次,如何移動。注意每次只能一個 。
分析:
漢諾塔問題就是把A柱上的N-1個盤子經過C移動到B,再把A上的最大的盤子移到C,而B上的N-1再類似上述步驟遞迴迴圈移到C上。
動畫演示:

上程式碼:
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); } } 複製程式碼