我的书有一个类似于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循环,对我来说理解起来并不复杂?谢谢!
答案 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);
}
}
运行它并查看它向您显示的内容。