C语言汉诺塔问题递归
时间: 2023-08-13 21:10:01 浏览: 126
C语言实现汉诺塔问题的递归解法如下:
```c
#include <stdio.h>
void move(int n, char a, char b, char c) {
if (n == 1) {
printf("%c -> %c\n", a, c);
} else {
move(n - 1, a, c, b);
printf("%c -> %c\n", a, c);
move(n - 1, b, a, c);
}
}
int main() {
int n = 3;
move(n, 'A', 'B', 'C');
return 0;
}
```
其中,move函数的三个参数分别表示:当前要移动的盘子数目n,起始柱子a,中间柱子b和目标柱子c。当n为1时,直接将起始柱子上的唯一一个盘子移动到目标柱子上;当n大于1时,先将n-1个盘子从起始柱子移动到中间柱子上,再将起始柱子上的最后一个盘子移动到目标柱子上,最后将中间柱子上的n-1个盘子移动到目标柱子上。
在主函数中,我们调用move函数,将3个盘子从起始柱子A移动到目标柱子C。您可以根据需要修改n的值来测试不同数量盘子的情况。
相关问题
C语言汉诺塔的递归调用
汉诺塔问题是一个经典的递归问题,以下是 C 语言实现汉诺塔的递归调用代码:
```
#include <stdio.h>
void move(int n, char from, char to, char via) {
if (n == 1) {
printf("Move disk 1 from %c to %c\n", from, to);
} else {
move(n - 1, from, via, to);
printf("Move disk %d from %c to %c\n", n, from, to);
move(n - 1, via, to, from);
}
}
int main() {
int n = 3; // 汉诺塔盘子数
move(n, 'A', 'C', 'B');
return 0;
}
```
其中,move 函数实现了汉诺塔的递归调用,n 表示盘子的数量,from、to、via 分别表示起始柱、目标柱和辅助柱。在 move 函数中,当盘子数为 1 时,直接将盘子从起始柱移动到目标柱;当盘子数大于 1 时,先将 n-1 个盘子从起始柱移动到辅助柱,再将第 n 个盘子从起始柱移动到目标柱,最后将 n-1 个盘子从辅助柱移动到目标柱。在 main 函数中,将初始柱设置为 A,目标柱设置为 C,辅助柱设置为 B,调用 move 函数开始汉诺塔的递归调用。
汉诺塔问题递归C语言
汉诺塔问题是经典的递归问题之一,通常用于展示递归算法的力量和优雅。以下是使用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`柱子作为辅助。
阅读全文