【代碼片段】漢諾塔python

漢諾塔 (http://baike.baidu.com/view/191666.htm) 的移動也可以看做是遞歸函數。

我們對柱子編號爲a, b, c,將所有圓盤從a移到c可以描述爲:

如果a只有一個圓盤,可以直接移動到c;

如果a有N個圓盤,可以看成a有1個圓盤(底盤) + (N-1)個圓盤,首先需要把 (N-1) 個圓盤移動到 b,然後,將 a的最後一個圓盤移動到c,再將b的(N-1)個圓盤移動到c。

請編寫一個函數,給定輸入 n, a, b, c,打印出移動的步驟:

move(n, a, b, c)

例如,輸入 move(2, 'A', 'B', 'C'),打印出:
A --> B
A --> C

B --> C

def move(n, a, b, c):
    if n ==1:
        print a, '-->', c
        return
    move(n-1, a, c, b)
    print a, '-->', c
    move(n-1, b, a, c)
move(4, 'A', 'B', 'C')

A --> B
A --> C
B --> C
A --> B
C --> A
C --> B
A --> B
A --> C
B --> C
B --> A
C --> A
B --> C
A --> B
A --> C
B --> C
def hanoi(n,x,y,z):
    if n==1:
        print(x,'-->',z)
    else:
        hanoi(n-1,x,z,y)#將前n-1個盤子從x移動到y上
        hanoi(1,x,y,z)#將最底下的最後一個盤子從x移動到z上
        hanoi(n-1,y,x,z)#將y上的n-1個盤子移動到z上
n=int(input('請輸入漢諾塔的層數:'))
hanoi(n,'x','y','z')


發佈了76 篇原創文章 · 獲贊 29 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章