C语言 (4) 请编写汉诺塔函数并在主函数中调用输出结果。
时间: 2023-12-14 18:39:42 浏览: 63
基于c语言实现的汉诺塔演示程序
汉诺塔(Tower of Hanoi)问题是经典的递归问题,它需要将一堆盘子从一个柱子移动到另一个柱子,且在过程中不能将大盘子放在小盘子上面。以下是使用 C 语言编写的汉诺塔函数:
```c
#include <stdio.h>
void hanoi(int n, char A, char B, char C) {
if (n == 1) {
printf("Move disk 1 from rod %c to rod %c\n", A, C);
return;
}
hanoi(n-1, A, C, B);
printf("Move disk %d from rod %c to rod %c\n", n, A, C);
hanoi(n-1, B, A, C);
}
int main() {
int n;
printf("Enter the number of disks: ");
scanf("%d", &n);
hanoi(n, 'A', 'B', 'C');
return 0;
}
```
在主函数中,我们首先要输入盘子的数量,然后调用 `hanoi` 函数。`hanoi` 函数的参数 `n` 表示盘子的数量,`A`、`B` 和 `C` 分别表示三个柱子。如果 `n` 等于 1,我们直接将盘子从柱子 A 移动到柱子 C;否则,我们先将前 n-1 个盘子从柱子 A 移动到柱子 B,再将第 n 个盘子从柱子 A 移动到柱子 C,最后将前 n-1 个盘子从柱子 B 移动到柱子 C。
运行程序,输入盘子的数量,输出移动的步骤:
```
Enter the number of disks: 3
Move disk 1 from rod A to rod C
Move disk 2 from rod A to rod B
Move disk 1 from rod C to rod B
Move disk 3 from rod A to rod C
Move disk 1 from rod B to rod A
Move disk 2 from rod B to rod C
Move disk 1 from rod A to rod C
```
阅读全文