需要解释Java程序逻辑

时间:2015-04-04 23:40:43

标签: java loops logic

我的书有一个类似于this的程序。

public class Partition { 

public static void partition(int n) {
    partition(n, n, "");
}
public static void partition(int n, int max, String prefix) {
    if (n == 0) {
        StdOut.println(prefix);
        return;
    }

    for (int i = Math.min(max, n); i >= 1; i--) {
        partition(n-i, i, prefix + " " + i);
    }
}


public static void main(String[] args) { 
    int N = Integer.parseInt(args[0]);
    partition(N);
}

}

是否有另一种方式以不同的方式编写for循环,对我来说理解起来并不复杂?谢谢!

1 个答案:

答案 0 :(得分:0)

当试图理解递归方法/函数时,我发现添加一些明智的调试代码会有所帮助,它告诉你每一步的进展情况。为了增加视觉吸引力,我添加了一个可视化告诉我我所处的水平的debugIndent。

StdOut(debugIndent + "n = " + n + ", max = " + max + ", prefix = \"" prefix + "\""); 

将它放在第二个分区的开头,如下所示:

Public class Partition { 

    public static void partition(int n) {
        partition("", n, n, "");
    }
    public static void partition(String debugIndent, int n, int max, String prefix) {
        StdOut(debugIndent + "n = " + n + ", max = " + max + ", prefix = \"" prefix + "\""); // TODO remove debugging code

        if (n == 0) {
            StdOut.println(prefix);
            return;
        }

        for (int i = Math.min(max, n); i >= 1; i--) {
            partition(debugIndent + "  ", n-i, i, prefix + " " + i);
        }
    }


    public static void main(String[] args) { 
        int N = Integer.parseInt(args[0]);
        partition(N);
    }
}

运行它并查看它向您显示的内容。