漢諾塔的盤子移動過程中目的將盤子從a(初始盤)借助b(借用盤)移動到c(目標盤)。整個過程注意把握兩點:
一:一次遞迴呼叫中三個盤子分別起到了什麼作用。
二:呼叫以後三個盤子的角色又變換成了什麼。
詳細分析:
(n=2)兩個盤子的情況下:
1.第一次呼叫find函式a盤代表初始盤,b盤代表目標盤,c盤代表借用盤。
2.按照find函式find(n, a, b, c)的排列順序即,a的位置為初始盤,b的位置為借用盤c的位置為目標盤,故第一次呼叫find函式的時候傳值順序為find(n-1,a,c, b,);
3.此刻第一次呼叫已經結束,abc三個盤的碟片數為a只有n號盤,b有n-1號個盤子,c為0個。
4.此刻呼叫mov()函式,將a上的n號盤移動到c。
5.此刻第二次呼叫find函式,但是其中abc角色已經發生了變化但是find函式的位置(初始盤,借用盤,目標盤)沒有變。故此刻為借用c盤將b盤上的n-1個盤移動到a盤上。再次呼叫find函式時傳值為find(n-1,b,a, c)。
注意:
1.碟片的功能確定,剩餘碟片數所在的盤為初始盤,c盤永遠為目標盤,空盤為借用盤。
2.把握一點,函式find(n剩餘碟片數,a初始盤,b借用盤,c目標盤)即可。
漢諾塔問題解析
漢諾塔 漢諾塔 又稱河內塔 問題是源於印度乙個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片 圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤。這個問題...
漢諾塔問題解法
漢諾塔 漢諾塔 又稱河內塔 問題是源於印度乙個古老傳說的益智玩具。上帝創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上安大小順序摞著64片 圓盤。上帝命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤。include...
漢諾塔問題
問題 假設有3個分別命名為x,y,z的寶塔,在塔座x上插有n個直徑大小各不相同,從小到大編號為1,2,3。n的圓盤。現要求將x軸上的n個圓盤移至塔座z上 並仍然按同樣的順序疊排,圓盤移動時必須遵循下列規則 1.每次只能移動乙個圓盤 2.圓盤可以插在x,y和z中的任一塔座上 3.任何時刻都不能將乙個較...