汉诺塔四根柱子c语言代码详解
时间: 2023-07-31 12:09:06 浏览: 100
以下是汉诺塔四根柱子的 C 语言代码实现,注释详细说明了每一步的操作:
```c
#include <stdio.h>
void hanoi(int n, int a, int b, int c, int d) {
if (n == 1) { // 当只有一个盘子时,直接移动到目标柱子上
printf("Move disk %d from rod %d to rod %d\n", n, a, d);
return;
}
hanoi(n-2, a, d, c, b); // 递归地将前 n-2 个盘子从起始柱子移动到目标柱子的辅助柱子上
printf("Move disk %d from rod %d to rod %d\n", n-1, a, c); // 将第 n-1 个盘子从起始柱子移动到中间柱子上
printf("Move disk %d from rod %d to rod %d\n", n, a, d); // 将第 n 个盘子从起始柱子移动到目标柱子上
printf("Move disk %d from rod %d to rod %d\n", n-1, c, d); // 将第 n-1 个盘子从中间柱子移动到目标柱子上
hanoi(n-2, b, a, c, d); // 递归地将前 n-2 个盘子从辅助柱子移动到目标柱子上
}
int main() {
int n = 4; // 盘子的数量
hanoi(n, 1, 2, 3, 4); // 调用 hanoi 函数进行汉诺塔问题的求解
return 0;
}
```
在这个实现中,我们使用了递归的方式来解决汉诺塔问题。在每次递归中,我们将前 n-2 个盘子从起始柱子移动到目标柱子的辅助柱子上,然后将第 n-1 个盘子从起始柱子移动到中间柱子上,再将第 n 个盘子从起始柱子移动到目标柱子上,最后将第 n-1 个盘子从中间柱子移动到目标柱子上,最终完成了汉诺塔问题的求解。
需要注意的是,在这个实现中,我们使用了 1、2、3、4 四个数字来代表四根柱子,其中 1 代表起始柱子,2 和 4 代表辅助柱子,3 代表目标柱子。
阅读全文