汉诺塔问题递归C语言
时间: 2024-12-10 07:16:52 浏览: 17
汉诺塔问题是经典的递归问题之一,通常用于展示递归算法的力量和优雅。以下是使用C语言解决汉诺塔问题的代码示例:
```c
#include <stdio.h>
void hanoi(int n, char source, char auxiliary, char target) {
if (n == 1) {
printf("Move disk 1 from %c to %c\n", source, target);
return;
}
hanoi(n-1, source, target, auxiliary);
printf("Move disk %d from %c to %c\n", n, source, target);
hanoi(n-1, auxiliary, source, target);
}
int main() {
int n = 3; // 盘子数量
printf("The sequence of moves involved in the Tower of Hanoi are :\n");
hanoi(n, 'A', 'B', 'C');
return 0;
}
```
在这个代码中,`hanoi`函数是一个递归函数,用于解决汉诺塔问题。它接受四个参数:
1. `n`:当前需要移动的盘子数量。
2. `source`:当前盘子所在的柱子。
3. `auxiliary`:辅助柱子,用于临时存放盘子。
4. `target`:目标柱子,盘子最终需要移动到的柱子。
递归的步骤如下:
1. 将`n-1`个盘子从`source`柱子移动到`auxiliary`柱子,使用`target`柱子作为辅助。
2. 将第`n`个盘子从`source`柱子移动到`target`柱子。
3. 将`n-1`个盘子从`auxiliary`柱子移动到`target`柱子,使用`source`柱子作为辅助。
阅读全文