遞迴(Recursion)是函數呼叫自身的程式設計技巧
什麼是遞迴?
一個合法的遞迴必須包含三個要素:
河內塔的遞迴思路(分三步)
Python 程式碼
def hanoi(n, from_rod, to_rod, via_rod):
if n == 1: # 基礎情況
print(f"移動圓盤 1:{from_rod} → {to_rod}")
return
hanoi(n - 1, from_rod, via_rod, to_rod) # 步驟 1
print(f"移動圓盤 {n}:{from_rod} → {to_rod}") # 步驟 2
hanoi(n - 1, via_rod, to_rod, from_rod) # 步驟 3
hanoi(3, 'A', 'C', 'B')
# 移動圓盤 1:A → C (共 7 步)
# 移動圓盤 2:A → B
# 移動圓盤 1:C → B
# 移動圓盤 3:A → C
# 移動圓盤 1:B → A
# 移動圓盤 2:B → C
# 移動圓盤 1:A → C時間複雜度:最少步數 = 2ⁿ − 1
| 圓盤數 | 最少步數 | 備註 |
|---|---|---|
| 3 | 7 | 可手動完成 |
| 10 | 1,023 | |
| 20 | 1,048,575 | |
| 64 | 18,446,744,073,709,551,615 | ♾️ 約 5800 億年(傳說世界末日) |
在上方遊戲中,每完成一次移動就對應遞迴樹的一個「葉節點」。觀察步數是否符合 2ⁿ − 1 的規律!