编写函数,用递归法求汉诺塔问题 
时间: 2023-06-04 20:05:13 浏览: 20
好的,我可以为您编写这个函数。
以下是Python代码:
```python
def hanoi(n, start, end, mid):
if n == 1:
print(start, "->", end)
else:
hanoi(n-1, start, mid, end)
print(start, "->", end)
hanoi(n-1, mid, end, start)
```
解释一下:
- 函数的参数n代表汉诺塔问题中的盘子数量。
- start、end、mid分别表示汉诺塔问题中的三个柱子,start代表起始柱子,end代表目标柱子,mid代表中间柱子。
- 如果只有一个盘子,直接将其从起始柱子移动到目标柱子即可。
- 如果有n个盘子,则先将前n-1个盘子从起始柱子移动到中间柱子,然后将第n个盘子从起始柱子移动到目标柱子,最后将前n-1个盘子从中间柱子移动到目标柱子。
测试一下这个函数:
```python
hanoi(3, "A", "C", "B")
```
输出结果:
```
A -> C
A -> B
C -> B
A -> C
B -> A
B -> C
A -> C
```
希望这个函数能够帮到您。
相关问题
用C语言编写一个函数,用递归法求汉诺塔问题
好的,我明白了。以下是用C语言编写一个递归函数解决汉诺塔问题的代码:
```
void move(int n, char src, char dst, char mid) {
if (n == 1) {
printf("Move disk 1 from %c to %c\n", src, dst);
}
else {
move(n-1, src, mid, dst);
printf("Move disk %d from %c to %c\n", n, src, dst);
move(n-1, mid, dst, src);
}
}
```
其中,n表示盘子的数量,src、dst、mid分别表示三个柱子的名称。调用该函数时,将初始柱子、目标柱子和中间柱子的名称传递给它即可,例如:
```
move(3, 'A', 'C', 'B');
```
该程序将输出汉诺塔的移动步骤,将三个盘子从A柱子移动到C柱子。
3. 编写函数,用递归形式实现汉诺塔问题。
好的,我可以回答这个问题。以下是用递归形式实现汉诺塔问题的函数:
```python
def hanoi(n, a, b, c):
if n == 1:
print("{} -> {}".format(a, c))
else:
hanoi(n-1, a, c, b)
print("{} -> {}".format(a, c))
hanoi(n-1, b, a, c)
```
其中,n表示盘子的个数,a、b、c表示三个柱子。在每一次递归中,将n-1个盘子从a移动到b,再将第n个盘子从a移动到c,最后将n-1个盘子从b移动到c即可完成移动。
相关推荐















