###### tags: `APCS` # **a227-三龍杯 -> 河內之塔** ### **題目連結:** [**a227**](https://zerojudge.tw/ShowProblem?problemid=a227) ### **題目解析** 河內塔(Tower of Hanoi)是一個著名的數學問題,目標是將一組環從一個柱子移動到另一個柱子,遵循以下規則: 1. 一次只能移動一個環。 1. 每個移動只能將環從一個柱子移到另一個柱子。 1. 不能將大環放在小環上面。 給定一個正整數 𝑁,表示有 𝑁 個環,請輸出將所有環從柱子 A 移動到柱子 C 的方法。 ### **解題方向** 1. 解析輸入資料,讀取每行輸入的正整數 𝑁。 1. 使用遞迴方法計算和輸出將 𝑁 個環從柱子 A 移動到柱子 C 的每一步驟。 ### **程式解析** 1. 遞迴函數 hanoi: 1. 若 𝑛 大於 0,則進行以下步驟: 2. 將第 𝑛 個環從 source 柱移動到 target 柱。 3. 將 𝑛 − 1 個環從 helper 柱移動到 target 柱。 2. 主程式 solve_hanoi_problems: 3. 讀取所有輸入的正整數𝑁。 4. 對每個 𝑁 調用 hanoi 函數並輸出結果。 ### **完整程式碼** ```python= def hanoi(n, source, helper, target): if n > 0: # 移動n-1個環從source到helper hanoi(n-1, source, target, helper) # 移動第n個環從source到target print(f"Move ring {n} from {source} to {target}") # 移動n-1個環從helper到target hanoi(n-1, helper, source, target) def solve_hanoi_problems(numbers): for n in numbers: hanoi(n, 'A', 'B', 'C') print() ```