有三根柱子 A、B、C,A 柱上從下到大疊放 n 個圓盤。目標:將所有圓盤移動到 C 柱,規則:一次只能移一個盤,大盤不能壓在小盤上。
#include <stdio.h>
void move(char from, char to) {
printf(\"%c --> %c\\n\", from, to);
}
void hanoi(int n, char source, char auxiliary, char target) {
if (n == 1) {
move(source, target);
} else {
hanoi(n - 1, source, target, auxiliary); // 步驟 1
move(source, target); // 步驟 2
hanoi(n - 1, auxiliary, source, target); // 步驟 3
}
}
int main() {
int n;
printf(\"請輸入圓盤數量: \");
scanf(\"%d\", &n);
printf(\"移動步驟:\\n\");
hanoi(n, 'A', 'B', 'C');
return 0;
}
source, auxiliary, target 位置必須對應邏輯角色,不能單純輪換。if (n == 1) 會導致無限遞歸棧溢位。move 中累加全域變數或回傳長整數。漢諾塔模型廣泛應用於遞歸教學、編譯器優化(尾遞歸消除)、分散式系統資料遷移調度等領域。