用C语言编写一个函数,用递归法求汉诺塔问题
时间: 2023-06-04 08:05:14 浏览: 145
好的,我明白了。以下是用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柱子。
相关问题
编写函数,用递归法求汉诺塔问题
好的,我可以为您编写这个函数。
以下是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语言实现汉诺塔的递归算法的步骤:
1.定义一个函数Hanoi,它有四个参数:n表示盘子的数量,POS1、POS2、POS3分别表示三个柱子的名称,其中POS1是起始柱子,POS3是目标柱子,POS2是中间柱子。
2.在函数Hanoi中,首先需要判断递归终止条件,即当n等于1时,直接将起始柱子上的盘子移动到目标柱子上。
3.如果n大于1,则需要将n-1个盘子从起始柱子移动到中间柱子上,然后将最后一个盘子从起始柱子移动到目标柱子上,最后将n-1个盘子从中间柱子移动到目标柱子上。
下面是C语言实现汉诺塔的递归算法的代码:
```
void Hanoi(int n, char POS1, char POS2, char POS3) {
if (n == 1) {
move(POS1, POS3);
} else {
Hanoi(n-1, POS1, POS3, POS2);
move(POS1, POS3);
Hanoi(n-1, POS2, POS1, POS3);
}
}
```
其中,move函数表示将一个盘子从起始柱子移动到目标柱子上。