漢諾塔遞歸我理解不了怎麼辦

'''
漢諾塔——藉助B柱,將A柱的所有盤子移動到C柱上,期間小的盤子永遠在上面,一次只能移動一個盤子
'''
# 觀察問題:
# 1.如果只有 1 個盤子A——>C
# 2.如果有大於等於 2 個盤子,我們總可以把它們看成是 2 個盤子,一個是最下面的最大的盤子,一個是剩下上面的盤子
# 2.1 先把最上面的1 個或多個盤子移到B上A——>B
# 2.2 再把最下面的盤子從A——>C
# 2.3 把B柱上的盤子從B——>C
# 定義一個函數用來解決漢諾塔問題

def hanoiTower(n, a, b, c):
    # 參數n代表盤子個數  a b c 代表柱 A B C
    # 基線條件一 退出
    if n == 1:
        print('第 1 個盤子從', a, '-->', c)

    # 基線條件二 遞歸
    else:
        # n>=2 的情況
        # 2.1 先把最上面的1 個或多個盤子移到B上A——>B 藉助 C  hanoiTower(n-1)指除了最下面一個大盤子外其他的所有
        hanoiTower(n-1, a, c, b)

        # 2.2 再把最下面的盤子從A——>C
        print('第', n, '個盤子從', a, '-->', c)

        # 2.3 把B柱上的盤子從B——>C 可能借助A
        hanoiTower(n-1, b, a, c)

hanoiTower(4, 'A', 'B', 'C')
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章