汉诺塔C语言递归打印每个盘子的编号
时间: 2024-11-27 19:18:09 浏览: 6
汉诺塔是一个经典的递归问题,涉及将一堆盘子从一根柱子移动到另一根柱子,而每次只能移动一个大盘子,并且大盘子不能放在小盘子上面。在C语言中,我们可以使用递归来打印每个盘子移动的过程。以下是简单的Hanoi Tower问题的递归函数示例:
```c
#include <stdio.h>
void hanoi(int n, char from_rod, char to_rod, char aux_rod) {
if (n > 0) { // 当有盘子需要移动时
// 移动前n-1个盘子到辅助杆
hanoi(n - 1, from_rod, aux_rod, to_rod);
// 移动当前的大盘子到目标杆
printf("Move disk %d from rod %c to rod %c\n", n, from_rod, to_rod);
// 再次移动之前移动过的n-1个盘子到目标杆
hanoi(n - 1, aux_rod, to_rod, from_rod);
}
}
int main() {
int num_disks = 3; // 可根据需求改变盘子数
hanoi(num_disks, 'A', 'C', 'B'); // A、B和C代表初始的三个柱子
return 0;
}
```
在这个例子中,`hanoi`函数接受四个参数:盘子的数量`n`,源柱子`from_rod`,目标柱子`to_rod`,以及临时辅助柱子`aux_rod`。当打印时,会按照经典的"转移小盘子,再移动大盘子,最后恢复小盘子"的策略,显示每个步骤。
阅读全文