用c语言写hanoi塔的非递归算法
时间: 2024-10-21 21:09:00 浏览: 29
hanoi塔非递归.rar
Hanoi塔是一个经典的递归问题,但也可以用迭代的方式来解决非递归。以下是使用C语言编写的一个Hanoi塔的非递归算法:
```c
#include <stdio.h>
void moveDisk(int fromRod, int toRod, int size) {
printf("Move disk %d from rod %d to rod %d\n", size, fromRod + 1, toRod + 1);
}
void hanoiNonRecursive(int n, char fromRod, char auxRod, char toRod) {
if (n > 0) {
// Move top n - 1 disks from source to auxiliary rod
hanoiNonRecursive(n - 1, fromRod, toRod, auxRod);
// Move the nth disk from source to target rod
moveDisk(fromRod, toRod, n);
// Move the n - 1 disks that were on auxiliary to target rod
hanoiNonRecursive(n - 1, auxRod, fromRod, toRod);
}
}
int main() {
int numDisks = 3; // 修改这个值来改变问题规模
hanoiNonRecursive(numDisks, 'A', 'B', 'C');
return 0;
}
```
在这个算法中,`moveDisk()` 函数负责打印移动的动作,而 `hanoiNonRecursive()` 函数则是递归调用自身,每次减少一个盘子,直到所有盘子都移到目标位置。
阅读全文