各位晚上好,

我有一个关于我的类(class)正在做的关于递归的家庭作业的快速问题。这个想法是我们有这个汉诺塔程序,我们需要编写一个主程序来制作一个表格,该表格将显示数字 5-25,以及解决这个大小的塔需要多少步,例如

5 ---- 31 移动

6 ---- 63 移动

等等...

我在这样做时遇到了一些麻烦,因为 TowersOfHanoi 类设置为打印出每个移动,我认为我们不应该摆脱它,但我不太确定。

这是 TowersOfHanoi 类

public class TowersOfHanoi {
    private int totalDisks;
    private int count;

    public TowersOfHanoi(int disks) {
        totalDisks = disks;
        count = 0;
    }

    public void solve() {
        moveTower (totalDisks,1,3,2);
    }

    private void moveTower(int numDisks, int start, int end, int temp) {
        if (numDisks ==1) {
            moveOneDisk(start,end);
        }
        else {
            moveTower (numDisks-1, start, temp, end);
            moveOneDisk (start, end);
            moveTower (numDisks-1, temp, end, start);
        }
    }

    private void moveOneDisk(int start, int end) {
        count = count+1;
        System.out.println("Move one disk from "+start+" to "+end+" - Move "+count);
    }
}

现在我只需要编写一个 main 来创建该表,而无需打印出每个塔的每一个 Action ,但我不确定如何做。任何帮助深表感谢

最佳答案

对于要解决难题的每个磁盘,您都需要一个 TowersOfHanoi 类的对象。为此,您将在 main 方法中通过向它们传递不同的参数(从 5 到 25)来创建这些对象。构造对象后,您只需在其上调用 solve 方法。

我将把实现留给你,因为这被标记为家庭作业。

关于java - 汉诺塔 Java 递归,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10328038/

10-13 05:01