解決漢諾塔問題的常見方法是使用遞歸。以下是使用遞歸解決C語言漢諾塔問題的示例代碼:
#include <stdio.h>
void hanoi(int n, char from_rod, char to_rod, char aux_rod) {
if (n == 1) {
printf("Move disk 1 from rod %c to rod %c\n", from_rod, to_rod);
return;
}
hanoi(n-1, from_rod, aux_rod, to_rod);
printf("Move disk %d from rod %c to rod %c\n", n, from_rod, to_rod);
hanoi(n-1, aux_rod, to_rod, from_rod);
}
int main() {
int n = 3; // 設置漢諾塔的盤子數量
hanoi(n, 'A', 'C', 'B');
return 0;
}
運行上述代碼,將會輸出移動盤子的步驟。在這個例子中,我們假設有三個盤子,開始時放置在A柱子上,要把它們全部移動到C柱子上,輔助柱子為B。
這個遞歸解決方案的思路是將問題分解為三個步驟:
將n-1個盤子從A柱子移動到B柱子(利用C作為輔助柱子);
將第n個盤子從A柱子移動到C柱子;
將n-1個盤子從B柱子移動到C柱子(利用A作為輔助柱子)。
通過遞歸調用hanoi函數,反復執行這三個步驟,就可以解決漢諾塔問題。