汉诺塔的非递归实现 C
时间: 2024-10-13 22:16:15 浏览: 27
汉诺塔是一种经典的递归问题,其目标是将一堆盘子从一个柱子移动到另一个柱子,遵守一定的规则:大盘子不能放在小盘子之上,而且每次只能移动一个盘子。非递归实现通常会使用栈来模拟递归过程。
以下是一个简单的非递归实现汉诺塔的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
void hanoi(int n, char from_rod, char to_rod, char aux_rod) {
if (n > 0) {
// 将前n - 1个盘子从from移到aux
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个盘子从aux移到to
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;
}
```
在这个例子中,`hanoi`函数接受四个参数:盘子的数量`n`,起始柱子`from_rod`,目标柱子`to_rod`和辅助柱子`aux_rod`。它首先处理较小的盘子,然后将最大盘子移动到目标位置,最后处理剩余的盘子。通过这种方式,它实现了非递归地解决汉诺塔问题。
阅读全文