天天看點

C語言之算法初步(漢諾塔--遞歸算法)

 個人覺得漢諾塔這個遞歸算法比電子老鼠的難了一些,不過一旦了解了也還是可以的,其實網上也有很多代碼,可以直接參考。記得大一開始時就做過漢諾塔的習題,但是那時代碼寫得很長很長,也是不了解遞歸的結果。現在想起來漢諾塔的算法就3個步驟:第一,把a上的n-1個盤通過c移動到b。第二,把a上的最下面的盤移到c。第三,因為n-1個盤全在b上了,是以把b當做a重複以上步驟就好了。是以算法看起來就簡單多了。不過,思考過程還是很痛苦的,難以了解。遞歸中會儲存資料的好處在這裡又得到展現,太神奇了。

漢諾塔代碼如下:

#include<stdio.h>

void

move(

int

n,

char

a,

char

b,

char

c)

{

if

(n==1)

printf

(

"\t%c->%c\n"

,a,c);   

//當n隻有1個的時候直接從a移動到c

else

{

move(n-1,a,c,b);           

//第n-1個要從a通過c移動到b

printf

(

"\t%c->%c\n"

,a,c);

move(n-1,b,a,c);           

//n-1個移動過來之後b變開始盤,b通過a移動到c,這邊很難了解

}

}

main()

{

int

n;

printf

(

"請輸入要移動的塊數:"

);

scanf

(

"%d"

,&n);

move(n,

'a'

,

'b'

,

'c'

);

}

繼續閱讀