你帮我形容云如何递归地思考程序? (一步步)

时间:2019-03-14 16:48:15

标签: java recursion

在我研究递归算法时,其代码如下:

    String n = starString(3);
    System.out.print(n);
} public static String starString(int n){
if(n < 0) {
    throw new IllegalArgumentException();
}else if(n == 0) {
    return "*";
}else{
    return starString(n - 1) + starString(n - 1);
}

我认为代码可以像下面那样工作

String n = starString(3); //Value is 3 then send 3 to function

所以它进入了else条件3次,对吧?

starString(3 - 1) + starString(3 - 1); //Its return is "**"

starString(2 - 1) + starString(2 - 1); //Its return is "**"

starString(1 - 1) + starString(1 - 1); //Its return is "**"

我认为结果应该像这样-> ****** //6 items

但是程序显示以下内容-> ******** //8 items

有人可以弄清楚为什么吗?

1 个答案:

答案 0 :(得分:2)

致电starString(3)时,它将返回:

starString(2) + starString(2)

上面的表达式扩展为(这是您弄错了的地方):

(starString(1) + starString(1)) + (starString(1) + starString(1))

然后,这些调用中的每一个都会扩展为:

((starString(0) + starString(0)) + (starString(0) + starString(0))) + ((starString(0) + starString(0)) + (starString(0) + starString(0)))

以下是上述格式的版本:

(
    (starString(0) + starString(0))
    + 
    (starString(0) + starString(0))
) 
+ 
(
    (starString(0) + starString(0)) 
    +
    (starString(0) + starString(0))
)

最外面的括号是starString(2)调用。内括号是starString(1)调用。

如您所见,有8个电话starString,因此有8个*