请用C++解答汉诺塔问题
时间: 2023-04-03 21:04:57 浏览: 77
汉诺塔问题是一个经典的递归问题,可以用C语言来解决。假设有三个柱子A、B、C,其中A柱子上有n个盘子,盘子大小不一,大的在下面,小的在上面。现在要将A柱子上的所有盘子移动到C柱子上,移动过程中可以借助B柱子,但是每次只能移动一个盘子,并且大盘子不能放在小盘子上面。解决汉诺塔问题的C程序如下:
#include <stdio.h>
void hanoi(int n, char A, char B, char C) {
if (n == 1) {
printf("Move disk 1 from %c to %c\n", A, C);
return;
}
hanoi(n-1, A, C, B);
printf("Move disk %d from %c to %c\n", n, A, C);
hanoi(n-1, B, A, C);
}
int main() {
int n;
printf("Enter the number of disks: ");
scanf("%d", &n);
hanoi(n, 'A', 'B', 'C');
return 0;
}
在这个程序中,hanoi函数用来解决汉诺塔问题,n表示盘子的数量,A、B、C分别表示三个柱子。当n等于1时,直接将盘子从A柱子移动到C柱子;否则,先将n-1个盘子从A柱子移动到B柱子,再将第n个盘子从A柱子移动到C柱子,最后将n-1个盘子从B柱子移动到C柱子。在main函数中,先输入盘子的数量,然后调用hanoi函数解决汉诺塔问题。