用C语言程序解决汉诺塔问题
时间: 2024-04-30 21:25:00 浏览: 94
汉诺塔问题是一个经典的递归问题,可以用C语言程序来解决。下面是一个示例程序:
```c
#include <stdio.h>
void move(int n, char from, char to, char via) {
if (n == 1) {
printf("Move disk 1 from %c to %c\n", from, to);
} else {
move(n-1, from, via, to);
printf("Move disk %d from %c to %c\n", n, from, to);
move(n-1, via, to, from);
}
}
int main() {
int n;
printf("Enter the number of disks: ");
scanf("%d", &n);
move(n, 'A', 'C', 'B');
return 0;
}
```
在这个程序中,`move` 函数接受三个参数:要移动的盘子数量 `n`,起始柱子 `from`,目标柱子 `to`,以及中间柱子 `via`。如果 `n` 等于 1,那么就直接把盘子从起始柱子移动到目标柱子;否则,递归地将前 `n-1` 个盘子从起始柱子移动到中间柱子,然后把第 `n` 个盘子从起始柱子移动到目标柱子,最后递归地将前 `n-1` 个盘子从中间柱子移动到目标柱子。在 `main` 函数中,先读入盘子数量 `n`,然后调用 `move` 函数开始移动盘子。我们把起始柱子称为 A 柱,目标柱子称为 C 柱,中间柱子称为 B 柱。
要编译这个程序,在命令行中运行:
```
gcc -o hanoi hanoi.c
```
然后运行程序:
```
./hanoi
```
程序会提示你输入盘子数量,输入之后就会输出每一步移动的过程。
阅读全文