漢諾塔遞迴演算法的實現(python)

2021-09-30 13:56:15 字數 1367 閱讀 3626

# 數字表示位置,-1,0,1,分別對應a,b,c

position1 =

# 定義乙個函式,該函式完成了把n階漢諾塔從起始位置a,移動到目標位置b的過程

defhannoi

(n, a, b):

# 如果漢諾塔是1階的,直接移動

if n == 1:

print(position1[a]+ "->" + position1[b])

return

# 計算除去起始位置和目標位置之外的,另乙個位置

tmp = a + b

if tmp == 0:

c = 0

elif tmp == 1:

c = -1

else:

c = 1

# 遞迴呼叫,把n階漢諾塔從a移動到b,需要3步

# 1. 把上面的那個n-1階漢諾塔,從a移動到c

hannoi(n-1, a, c)

# 2. 移動剩下的那乙個,從a到b

hannoi(1, a, b)

# 3. 再把c位置上的n-1階漢諾塔從c移到b

hannoi(n-1, c, b)

# 最後只需呼叫上面定義好的函式,乙個5階漢諾塔,從a移動到c

hannoi(5, -1, 1)

結果為:

a->c

a->b

c->b

a->c

b->a

b->c

a->c

a->b

c->b

c->a

b->a

c->b

a->c

a->b

c->b

a->c

b->a

b->c

a->c

b->a

c->b

c->a

b->a

b->c

a->c

a->b

c->b

a->c

b->a

b->c

a->c

其實,還有更加簡便的寫法,思路是一樣的,只不過不用計算上邊所謂的「除去起始位置和目標位置之外的,另乙個位置」,**如下:

def

hannoi

(n, a, b, c):

if n == 1:

print(a, "->", c)

return

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

print(a, "->", c)

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

hannoi(5, "a", "b", "c")

漢諾塔 遞迴演算法

個人覺得漢諾塔這個遞迴演算法比電子老鼠的難了一些,不過一旦理解了也還是可以的,其實網上也有很多 可以直接參考。記得大一開始時就做過漢諾塔的習題,但是那時 寫得很長很長,也是不理解遞迴的結果。現在想起來漢諾塔的演算法就3個步驟 第一,把a上的n 1個盤通過c移動到b。第二,把a上的最下面的盤移到c。第...

漢諾塔遞迴演算法

大學的時候專業課程很差,指導大二學習演算法設計的時候,發現專業課裡比較有趣的一門。專心學習了一學期 最近在學習python發現了乙個遞迴演算法很迷茫,遂研究了一下。簡單來說明一下 首先漢諾塔的規則是1 每次移動一塊 2 小木塊只能放在大木塊上 3 將所有木塊從a柱子移動c柱子木塊上 用幾個變數和常量...

使用遞迴演算法實現漢諾塔

漢諾塔原理解析 當只有乙個盤子的時候,只需要從將a塔上的乙個盤子移到c塔上。當a塔上有兩個盤子是,先將a塔上的1號盤子 編號從上到下 移動到b塔上,再將a塔上的2號盤子移動的c塔上,最後將b塔上的小盤子移動到c塔上。當a塔上有3個盤子時,先將a塔上編號1至2的盤子 共2個 移動到b塔上 需借助c塔 ...