汉罗塔问题解释,及代码C语言加注释
时间: 2024-12-06 20:24:51 浏览: 22
汉诺塔(Hanoi Tower)是一个经典的递归问题,它源于印度的一个古老游戏,目的是将所有盘子从一根柱子移动到另一根柱子,每次只能移动一个盘子,并且大盘子不能放在小盘子之上。规则是这样的:
1. 有三根柱子A、B、C。
2. n个盘子按从小到大顺序放在A柱上。
3. 目标是把所有盘子移到C柱,过程中任何时候都不能让大盘子放在小盘子上面。
以下是用C语言实现汉诺塔问题的简单示例,带有的注释说明了每一步骤:
```c
#include <stdio.h>
// 定义汉诺塔函数,接收三个参数:源柱子、目标柱子和辅助柱子
void hanoi(int n, char fromRod, char toRod, char auxRod) {
// 当只有一个盘子时,直接移动
if (n == 1) {
printf("Move disk 1 from rod %c to rod %c\n", fromRod, toRod);
return;
}
// 递归处理剩余的n-1个盘子,先移动到辅助柱子
hanoi(n - 1, fromRod, auxRod, toRod);
// 然后将最大的盘子从辅助柱子移动到目标柱子
printf("Move disk %d from rod %c to rod %c\n", n, auxRod, toRod);
// 最后,处理剩下的n-1个盘子,将其从辅助柱子移动回目标柱子
hanoi(n - 1, auxRod, toRod, fromRod); // 递归结束
}
int main() {
int numDisks = 3; // 可以为任意值,表示盘子的数量
hanoi(numDisks, 'A', 'C', 'B'); // A为源,C为目标,B为辅助
return 0;
}
```
阅读全文