1. 程式人生 > >採用遞迴的方法解決漢諾塔問題

採用遞迴的方法解決漢諾塔問題

分析:

將n個盤子有a座移動到c座可分為以下三個過程:

① 先將a座上n-1個盤子藉助c座移動到b座。

②再將a座最下面一個盤子移動至c座。

③最後將b上n-1個盤子藉助a移至c座

上述過程是把移動n個盤子的問題轉換成移動n-1個盤子的問題,按這種思路,在將移動n-1個盤子的問題轉化成n-2個盤子的問題,直至移動一個盤子。

可以用兩個函式描述上述移動過程:

① 從一個底座上移動n個盤子到另一個底座

②從一個底座上移動一個盤子到另一個底座

兩個函式的程式碼如下:

void Move(char chSour,char chDest)

{ printf("%c------>%c",chSour,chDest);

}

void Hanoi(int n,char A,char B,char C)

{if(n==1) Move(A,C);

else{Hanoi(n-1,A,C,B);

Move(A,C);

Hanoi(n-1,B,A.C);

}

}