7-1 汉诺塔的非递归实现 JAVA
时间: 2024-10-12 20:18:23 浏览: 126
Hanio:汉诺塔的递归及非递归实现
汉诺塔是一种经典的递归问题,但它也可以通过迭代的方式来解决,不需要使用递归。以下是Java中的非递归实现Hanoi Tower的示例:
```java
public class HanoiTower {
private char fromRod, toRod, auxRod; // 三个柱子
private int numDisks;
public HanoiTower(char from, char to, char aux) {
this.fromRod = from;
this.toRod = to;
this.auxRod = aux;
this.numDisks = 3; // 通常默认有3个盘子,可以按需调整
}
// 非递归的hanoi函数
public void hanoi(int disks) {
if (disks > 0) {
moveTopDisk(disks); // 移动最大的盘子到辅助柱
hanoi(disks - 1); // 将剩余的盘子移动到目标柱
moveTopDisk(disks, fromRod, toRod, auxRod); // 最大的盘子从辅助柱移动到目标柱
}
}
// 私有函数用于移动单个盘子
private void moveTopDisk(int size, char source, char dest, char auxiliary) {
System.out.println("Move disk " + size + " from rod " + source + " to rod " + dest);
if (auxiliary != ' ' && size > 1) { // 如果辅助柱不为空且需要移动的盘子大于1
moveTopDisk(size - 1, source, auxiliary, dest); // 先移动小一些的到辅助柱
}
System.out.println("Move disk " + size + " from rod " + source + " to rod " + dest);
}
// 测试函数
public static void main(String[] args) {
HanoiTower tower = new HanoiTower('A', 'C', 'B');
tower.hanoi(tower.numDisks);
}
}
```
在这个例子中,`hanoi`方法实现了Hanoi问题的整个过程,`moveTopDisk`函数则是递归地处理单个盘子的移动。当你运行这个程序,它会按照经典的汉诺塔规则一步步移动盘子。
阅读全文