递归 - 解释代码如何工作(绘图)

时间:2016-06-07 12:39:16

标签: java recursion

我编写此代码,并尝试了解所有执行的活动(递归)。 任何人都可以帮我这个画一张树,以纪念会发生什么?

public static String row(int n) {
    if (n == 1)
        return "1";

    else
        return row(n - 1) + " " + n;
}

public static String triangle(int a, int b) {
    if (a == b)
        return row(b);

    else
        return row(a) + "\n" + triangle(a + 1, b);

}
}

感谢的

1 个答案:

答案 0 :(得分:1)

您的row方法:

public static String row(int n) {
    if (n == 1) {
        return "1";
    } else {
        return row(n - 1) + " " + n;
    }
}

返回一个String,其中包含1 - n之间用空格分隔的所有数字。例如row(4)将返回一个字符串"1 2 3 4"

您的triangle方法会为三角形的每一行打印一个row

public static String triangle(int a, int b) {
    if (a == b) {
        return row(b);
    } else {
        return row(a) + "\n" + triangle(a + 1, b);
    }

}

为从ab的每一行创建一行三角形。

e.g。 triangle(4,6)将打印:

1 2 3 4
1 2 3 4 5
1 2 3 4 5 6

代码如何工作

row方法,如果给定值1将返回“1”。任何其他值都会生成相当于row(n-1)的字符串,后跟n,因此它基本上会返回1 2 3 ... n

triangle方法返回一个字符串,该字符串尝试用数字绘制三角形。因此triangle(4,6)返回row(4) + triangle(5,6),返回row(5) + triangle(6,6),返回row(6)。因此,最终结果将是:

1 2 3 4
1 2 3 4 5
1 2 3 4 5 6