遞歸-Hanio塔問題

直接或間接地調用自身的算法稱爲遞歸算法。用函數自身給出定義的函數稱爲遞歸函數。算法

簡單的算法:假設塔座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

相關文章
相關標籤/搜索