Java非递归算法实现汉诺塔问题
时间: 2024-10-20 17:05:54 浏览: 49
汉诺塔问题是一个经典的递归问题,但也可以通过迭代的方式实现,即非递归。在Java中,非递归解决汉诺塔问题通常使用栈数据结构。以下是步骤:
1. 定义三个柱子,分别标记为A、B和C。
2. 创建一个空栈,用于存储操作步骤,将初始移动序列(n-1次从A到C,然后从C到B,最后从B到A)压入栈中。
3. 当目标盘子(n)大于0时,循环执行以下操作:
a. 将上面n-1个盘子从起始柱子移动到辅助柱子(这里假设为B),并入栈,形成新的移动序列。
b. 将最大的盘子直接从起始柱子移动到目标柱子(这里是C)。
c. 从栈中弹出剩余的移动序列,将其应用到剩下的盘子上,完成整个过程。
以下是简单的Java代码实现:
```java
import java.util.Stack;
public class HanoiTower {
void hanoi(int n, char from, char to, char aux) {
if (n > 0) {
// Step 1: Move smaller disks to auxiliary peg
hanoi(n - 1, from, aux, to);
// Step 2: Move the largest disk directly to the target peg
System.out.println("Move disk " + n + " from " + from + " to " + to);
// Step 3: Move the remaining disks to the target peg using the auxiliary peg
hanoi(n - 1, aux, to, from);
}
}
public static void main(String[] args) {
int disks = 3; // 替换为你想要的层数
HanoiTower tower = new HanoiTower();
tower.hanoi(disks, 'A', 'C', 'B');
}
}
```
阅读全文