3

大家晚上好,

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

5 ---- 31 步

6 ---- 63 步

ETC...

我在这样做时遇到了一些麻烦,因为 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 来创建该表,而无需打印出每个塔的每一个动作,但我不确定如何去做。任何帮助深表感谢

4

3 回答 3

2

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

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

于 2012-04-26T06:10:14.817 回答
0

您可以删除 moveOneDisk 中的打印语句,然后在调用 main 中的递归方法后编写将输出计数的打印语句。

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

public static void main(){
TowersOfHanoi tower = TowersOfHanoi(5);
tower.solve();
system.out.print(tower.count);
}//end of main

删除 moveOneDisk 中的 print 语句将使得不会报告每一次移动,但计数仍会增加。然后您可以在使用类成员计数构造表时分配所需的任何变量。在这种情况下, tower.count

于 2012-05-03T02:09:33.883 回答
0

包中期;

public class TowersofHanoi {
    public int totalDisks;
    public static 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);
    }
    public static void main(){
        TowersofHanoi tower = new TowersofHanoi(5);
        tower.solve();

        System.out.println(tower.count);
        }

}
于 2015-11-12T17:30:16.033 回答