利用递归写一个汉诺塔的游戏
时间: 2023-12-19 19:06:02 浏览: 31
好的,汉诺塔的游戏可以用递归来实现。假设现在有三个柱子A、B、C,A柱子上有n个盘子,盘子大小不一,大的在下面,小的在上面。目标是将A柱子上的所有盘子移动到C柱子上,移动过程中可以借助B柱子。操作规则是每次只能移动一个盘子,大盘子不能放在小盘子上面。下面是递归函数的实现:
```python
def hanoi(n, a, b, c):
if n == 1:
print("Move disk %d from %s to %s" % (n, a, c))
else:
hanoi(n-1, a, c, b)
print("Move disk %d from %s to %s" % (n, a, c))
hanoi(n-1, b, a, c)
```
其中,n表示盘子的数量,a、b、c表示三个柱子的名称。当n等于1时,直接将盘子从A柱子移动到C柱子;当n大于1时,先将n-1个盘子从A柱子移动到B柱子,再将最大的盘子从A柱子移动到C柱子,最后将剩下的n-1个盘子从B柱子移动到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);
return;
}
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;
}
```
输入汉诺塔的层数后,程序会输出每一步移动的过程。例如输入3,则输出:
```
A -> C
A -> B
C -> B
A -> C
B -> A
B -> C
A -> C
```
用c编写以下要求利用递归写一个汉诺塔的游戏。
```
#include <stdio.h>
void hanoi(int n, char A, char B, char C) {
if (n == 1) { // 只有一个盘子时,直接将其从 A 移到 C
printf("Move disk %d from %c to %c\n", n, A, C);
} else {
// 先将 n-1 个盘子从 A 移到 B
hanoi(n-1, A, C, B);
// 将第 n 个盘子从 A 移到 C
printf("Move disk %d from %c to %c\n", n, A, C);
// 最后将 n-1 个盘子从 B 移到 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;
}
```
运行结果:
```
Enter the number of disks: 3
Move disk 1 from A to C
Move disk 2 from A to B
Move disk 1 from C to B
Move disk 3 from A to C
Move disk 1 from B to A
Move disk 2 from B to C
Move disk 1 from A to C
```