汉诺塔的非递归实现c的代码
时间: 2024-12-11 22:31:44 浏览: 9
汉诺塔是一个经典的递归问题,其基本思想是将A柱子上的n个盘子移动到C柱子上,中间经过B柱子,但任何时候都不能有大盘子放在小盘子上面。非递归实现通常使用栈来模拟递归的过程。以下是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_rod移动到aux_rod,作为递归的铺垫
hanoi(n - 1, from_rod, aux_rod, to_rod);
// 然后将最大的盘子从from_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;
}
```
在这个代码中,`hanoi()`函数是一个循环体,通过反复调用自身完成整个过程。当n减至0时,表示已经处理完了所有的小盘子,可以直接将大盘子移到目标位置。
阅读全文