汉诺塔问题C语言 pta
时间: 2024-12-03 17:13:35 浏览: 32
汉诺塔问题是一个经典的递归问题,它涉及将一组圆盘从一根柱子移动到另一根柱子,每次只能移动一个大盘子,并且任何时候都不能让大盘子放在小盘子之上。这个问题通常有三个柱子,A、B 和 C。目标是从 A 到 C 进行转移,而中间步骤允许借助 B 柱。
C 语言实现汉诺塔问题的递归算法如下:
```c
#include <stdio.h>
void hanoi(int n, char from_rod, char to_rod, char aux_rod) {
if (n > 0) {
// 将前 n - 1 个盘子从 from_rod 移动到 aux_rod
hanoi(n - 1, from_rod, aux_rod, to_rod);
// 然后把最大的盘子直接移到目标位置 to_rod
printf("Move disk %d from rod %c to rod %c\n", n, from_rod, to_rod);
// 最后将上面 n - 1 个盘子从 aux_rod 移到 to_rod
hanoi(n - 1, aux_rod, to_rod, from_rod);
}
}
int main() {
int num_disks = 3; // 可以更改这个数值表示任意大小的问题
hanoi(num_disks, 'A', 'C', 'B'); // 从'A'开始,移动到'C',辅助柱子'B'
return 0;
}
```
当你运行此程序时,会按照汉诺塔的规则依次打印出移动每个盘子的操作。
阅读全文