归栈非递归实现汉诺塔
时间: 2023-12-27 12:04:00 浏览: 37
好的,以下是归栈非递归实现汉诺塔的代码:
```python
def hanoi(n, A, B, C):
stack = []
while True:
while n > 0:
stack.append((n, A, B, C))
n -= 1
A, B, C = A, C, B
if not stack:
break
n, A, B, C = stack.pop()
print(f"Move disk {n} from {A} to {C}")
n -= 1
A, B, C = A, C, B
```
其中,n 表示汉诺塔的层数,A、B、C 分别表示三个柱子的名称。
相关问题
python递归实现汉诺塔
Python递归实现汉诺塔的算法如下:
```python
def hanoi(n, source, target, auxiliary):
if n > 0:
# 将n-1个盘子从源柱移动到辅助柱
hanoi(n-1, source, auxiliary, target)
# 将第n个盘子从源柱移动到目标柱
print(f"Move disk {n} from {source} to {target}")
# 将n-1个盘子从辅助柱移动到目标柱
hanoi(n-1, auxiliary, target, source)
# 测试
hanoi(3, 'A', 'C', 'B')
```
上述代码中,`hanoi`函数接受四个参数:`n`表示盘子的数量,`source`表示源柱,`target`表示目标柱,`auxiliary`表示辅助柱。函数首先判断如果盘子数量大于0,则进行递归操作。具体步骤如下:
1. 将n-1个盘子从源柱移动到辅助柱(递归调用hanoi函数)。
2. 将第n个盘子从源柱移动到目标柱。
3. 将n-1个盘子从辅助柱移动到目标柱(递归调用hanoi函数)。
通过不断地递归调用,最终将所有的盘子从源柱移动到目标柱。
c++递归实现汉诺塔
汉诺塔问题是一个经典的递归问题,可以用递归算法来解决。下面是C++递归实现汉诺塔的代码:
```cpp
#include <iostream>
using namespace std;
void hanoi(int n, char A, char B, char C) {
if (n == 1) {
cout << "将圆盘" << n << "从" << A << "移动到" << C << endl;
} else {
hanoi(n - 1, A, C, B);
cout << "将圆盘" << n << "从" << A << "移动到" << C << endl;
hanoi(n - 1, B, A, C);
}
}
int main() {
int n;
cout << "请输入A上圆盘n的个数:";
cin >> n;
hanoi(n, 'A', 'B', 'C');
return 0;
}
```
上述代码中,hanoi函数的参数n表示圆盘的个数,A、B、C分别表示三个柱子的名称。当n等于1时,直接将圆盘从A移动到C;当n大于1时,先将n-1个圆盘从A移动到B,再将第n个圆盘从A移动到C,最后将n-1个圆盘从B移动到C。这样就完成了整个汉诺塔的移动过程。