c语言实现hanoi塔
时间: 2023-10-28 22:07:17 浏览: 47
C语言可以通过递归函数实现汉诺塔问题。汉诺塔问题是一个经典的递归问题,其规则如下:有三个柱子A、B、C,A柱子上有n个盘子,盘子大小不等,大的在下,小的在上。要求把A柱子上的盘子全部移到C柱子上,并且每次移动只能移动一个盘子,大盘子不能放在小盘子上面。在移动过程中可以使用B柱子作为中转站。具体实现可以参考以下代码:
void hanoi(int n, char a, char b, char c) {
if (n == 1) {
printf("从%c移到%c\n", a, c);
} else {
hanoi(n - 1, a, c, b);
printf("从%c移到%c\n", a, c);
hanoi(n - 1, b, a, c);
}
}
int main() {
int n;
printf("请输入盘子的个数:");
scanf("%d", &n);
printf("移动步骤为:\n");
hanoi(n, 'A', 'B', 'C');
return 0;
}
在上述代码中,hanoi函数是递归函数,用于实现汉诺塔问题的移动。move函数被省略了,因为其只是用于打印移动过程,而不是实际移动盘子。在main函数中,首先输入盘子的个数,然后调用hanoi函数进行移动,并打印出移动步骤。
相关问题
C语言实现汉诺塔问题
汉诺塔问题是一个经典的递归问题,以下是C语言实现汉诺塔问题的代码:
```c
#include <stdio.h>
void hanoi(int n, char A, char B, char C) {
if (n == 1) {
printf("%c -> %c\n", A, C);
} else {
hanoi(n - 1, A, C, B);
printf("%c -> %c\n", A, C);
hanoi(n - 1, B, A, C);
}
}
int main() {
int n;
printf("请输入汉诺塔的层数:");
scanf("%d", &n);
hanoi(n, 'A', 'B', 'C');
return 0;
}
```
c语言实现汉诺塔问题
C语言可以通过递归的方式实现汉诺塔问题。下面是一个C语言的实现代码:
#include <stdio.h>
void move(char a, char b) {
printf("%c -> %c\n", a, b);
}
void hanoi(int n, char from, char temp, char to) {
if (n == 1) {
move(from, to);
} else {
hanoi(n - 1, from, to, temp);
move(from, to);
hanoi(n - 1, temp, from, to);
}
}
int main() {
int n;
printf("请输入盘子个数:");
scanf("%d", &n);
printf("移动步骤为:\n");
hanoi(n, 'A', 'B', 'C');
return 0;
}
以上代码中,move函数用于打印盘子的移动步骤,hanoi函数用于实现汉诺塔问题的递归算法。在主函数中,通过输入盘子个数n来调用hanoi函数,并打印出移动的步骤。