漢諾塔問題是一個經典的遞歸問題,其解法如下:
#include <stdio.h>
void move(int n, char a, char b, char c) {
if (n == 1) {
printf("Move disk 1 from %c to %c\n", a, c);
} else {
move(n - 1, a, c, b);
printf("Move disk %d from %c to %c\n", n, a, c);
move(n - 1, b, a, c);
}
}
int main() {
int n;
printf("Enter the number of disks: ");
scanf("%d", &n);
move(n, 'A', 'B', 'C');
return 0;
}
在上面的代碼中,move函數是遞歸的關鍵,它接受四個參數:n表示當前要移動的盤子數量,a、b、c分別表示起始柱子、中間柱子和目標柱子。當n為1時,直接將盤子從起始柱子移動到目標柱子;當n大于1時,先將n-1個盤子從起始柱子移動到中間柱子,然后將第n個盤子從起始柱子移動到目標柱子,最后將n-1個盤子從中間柱子移動到目標柱子。
通過遞歸調用move函數,可以解決任意數量的盤子的漢諾塔問題。