1. 程式人生 > >[Python3 練習] 005 漢諾塔1

[Python3 練習] 005 漢諾塔1

足夠 題目 == 遞歸 一次 info ret 移動 其余

題目:漢諾塔 I

(1) 描述

  • 傳說,在世界中心貝拿勒斯(在印度北部)的聖廟外有左中右三根足夠長的柱子(塔),左邊柱子上套著 64 片金片,金片按“上小下大”排,其余兩根是空柱子。僧人們借助中間的柱子將左邊柱子上的金片移動到右邊……

技術分享圖片

(2) 要求

  • 一次只能移動一片
  • 金片之間,必須是上小下大,即大金片不能放到小金片上
  • 借助中間柱子,將左邊柱子上所有的金片都移到右邊柱子為止

(3) 程序

# 使用遞歸

def hanoi(n, a, b, c):
    """
    n:塔的層數
    a:左邊的塔
    b:中間的塔
    c:右邊的塔
    """
    
    if n == 1:
        print(a, ‘-->‘, c)      # 將 a 塔頂層金片移到 c 塔
    else:
        hanoi(n-1, a, c, b)     # a 塔的 n-1 層金片借助 c 塔移到 b 塔
        print(a, ‘-->‘, c)      # 將 a 塔頂層金片移到 c 塔
        hanoi(n-1, b, a, c)     # b 塔的 n-1 層金片借助 a 塔移到 c 塔
        
    return None

hanoi(64, ‘A‘, ‘B‘, ‘C‘)        # A 塔的 64 層金片借助 B 塔移動到 C 塔

[Python3 練習] 005 漢諾塔1