經典的 漢諾塔 遞迴問題

2022-09-20 01:42:14 字數 863 閱讀 3334

請編寫move(n, a, b, c)函式,它接收引數n,表示3個柱子a、b、c中第1個柱子a的盤子數量,然後列印出把所有盤子從a借助b移動到c的方法,例如:

def move(n, a, b, c):

pass
move(3, 'a', 'b', 'c')

直接貼code

def move(n, a, b, c):

if n != 0:

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

print('%s --> %s' % (a, c))

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

move(3,'a','b','c')

結果如下

a --> c

a --> b

c --> b

a --> c

b --> a

b --> c

a --> c

意思呢,就是,當我之上還有別的圓盤,就降一維去先移它到過度點b。等之上的都移動走了,我直接移動到c,這就是輸出的那句話。

然後呢,我得把之前移開的上乙個想辦法一回來啊。所以有了最後一句話,把n-1那一維的再想辦法從b點移動到c點。

整體邏輯就是這樣,它會自己一層層往上推。

大家可以驗證

move(n-1,a,c,b)#要把最大的乙個從a移到c,那麼就需要把前n-1個移到b

move(1,a,b,c)#前n-1個都到b上去了,那就把最底下的那個從a-->b

move(n-1,b,a,c)#移了最底下的,再把b上的n-1個移到c上面就完成了。

為什麼傳參的順序是(a,b,c)或者(a,c,b)或者(b,a,c),是因為第乙個相當於當前盤子所在的柱子,中間是輔助的柱子,最後乙個是目標柱子。

經典遞迴問題 漢諾塔

漢諾塔 漢諾塔問題第一次接觸時就感覺非常有趣,但是由於當時知識有限不能深刻地理解遞迴的含義,所以沒能繼續深究,現在來談一談吧。題目描述 漢諾塔 於印度傳說的乙個故事,上帝創造世界時作了三根金剛石柱子,在一根柱子上從上往下從小到大順序摞著64片 圓盤。上帝命令婆羅門把圓盤從下面開始按大小順序重新擺放在...

經典問題 漢諾塔(遞迴)

c 如下 法國數學家愛德華 盧卡斯曾編寫過乙個印度的古老傳說 在世界中心貝拿勒斯 在印度北部 的聖廟裡,一塊黃銅板上插著三根寶石針。印度教的主神梵天在創造世界的時候,在其中一根針上從下到上地穿好了由大到小的64片金片,這就是所謂的漢諾塔。不論白天黑夜,總有乙個僧侶在按照下面的法則移動這些金片 一次只...

經典遞迴 漢諾塔問題

有三個柱子,三個盤子都在第乙個柱子上,現在要移到第三個柱子上,要求移動過程中盤子相對位置不變,小的還是在上,大的在下。思路 分兩步 1.將n 1個盤從乙個柱子移到另乙個柱子 借助另外乙個柱子 n 1 2.將1個盤子從乙個柱子移到另乙個柱子 用3個柱子移動n 1個盤子,目的 把所有盤子從x移到z vo...