直接或間接地調用自身的算法稱爲遞歸算法。用函數自身給出定義的函數稱爲遞歸函數。算法
簡單的算法:假設塔座a、b、c排成一個三角形,a-b-c-a構成順時針循環,在移動圓盤的過程當中,如果奇數次移動,則將最小的圓盤移動到順時針方向的下一個塔座上;如果偶數次移動,則保持最小的圓盤不動,而在其餘兩個塔座之間,將較小的圓盤移動到另外一個塔座上去。函數
使用遞歸算法實現以下spa
1 void hanoi (int n,int a ,int b, intc) 2 { 3 if(n>0){ 4 hanoi(n-1,a,c,b); 5 move(a,b); 6 hanoi(n-1,c,b,a); 7 } 8 }
hanoi(n,a,b,c)表示將塔座a上自下而上,由大到小疊放在一塊兒的個圓盤依移動規則移至塔座b上並按一樣的順序疊放。在移動的過程當中,以塔座c做爲輔助塔座。move(a,b)表示將塔座a上編號爲n的圓盤移至塔座b上。code