陳胤辰中原商設
首頁
簡介
講師介紹開課資訊
課程
運算思維與程式設計自然科學與人工智慧程式語言導論
互動
物品交換三門問題下注模擬器數字推盤河內塔
編程
線上編程P5.js
應用
人體系統玄學系統建築系統

語言

繁體中文简体中文English

陳胤辰

中原大學商業設計系
資宸科技

快速連結

  • 講師介紹
  • 開課資訊
  • 互動遊戲
  • 程式教學
  • 文章

聯絡 & 社群

© 2026 陳胤辰。保留所有權利。

Built with Next.js & Tailwind CSS

🎮 遊戲🏆 排行📖 原理

遞迴思維:用河內塔理解函數呼叫自身

遞迴(Recursion)是函數呼叫自身的程式設計技巧

什麼是遞迴?

一個合法的遞迴必須包含三個要素:

  • 基礎情況(Base Case):何時停止遞迴
  • 遞迴呼叫(Recursive Call):以更小的問題呼叫自身
  • 問題縮小(Reduction):確保每次呼叫都趨近基礎情況

河內塔的遞迴思路(分三步)

  1. 把上面的 n-1 個盤,從 A 移到 B(用 C 當中繼)
  2. 把最大的盤從 A 直接移到 C
  3. 把那 n-1 個盤,從 B 移到 C(用 A 當中繼)

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

圓盤數最少步數備註
37可手動完成
101,023
201,048,575
6418,446,744,073,709,551,615♾️ 約 5800 億年(傳說世界末日)

在上方遊戲中,每完成一次移動就對應遞迴樹的一個「葉節點」。觀察步數是否符合 2ⁿ − 1 的規律!