C語言可以使用遞歸來實現漢諾塔問題。以下是一個實現的示例代碼:
#include <stdio.h>
void hanoi(int n, char from, char to, char aux) {
if (n == 1) {
printf("Move disk 1 from %c to %c\n", from, to);
return;
}
hanoi(n - 1, from, aux, to);
printf("Move disk %d from %c to %c\n", n, from, to);
hanoi(n - 1, aux, to, from);
}
int main() {
int n;
printf("Enter the number of disks: ");
scanf("%d", &n);
hanoi(n, 'A', 'C', 'B');
return 0;
}
該程序使用遞歸函數hanoi
來實現漢諾塔。該函數接受四個參數:n
表示要移動的盤子數目,from
表示起始柱子,to
表示目標柱子,aux
表示輔助柱子。
遞歸的終止條件是當n
等于1時,直接將盤子從起始柱子移動到目標柱子。否則,先將n-1
個盤子從起始柱子移動到輔助柱子,然后將最后一個盤子從起始柱子移動到目標柱子,最后將n-1
個盤子從輔助柱子移動到目標柱子。
在main
函數中,用戶輸入要移動的盤子數目,然后調用hanoi
函數來執行移動操作。
注意:以上代碼僅為示例,沒有進行輸入驗證和錯誤處理。在實際應用中,應該考慮輸入的有效性和錯誤情況的處理。