理解我创建的递归方法

时间:2015-02-12 13:12:54

标签: java

这是一个非常具体的问题,但希望能帮助我进一步理解递归。

我们应该制作一个打印出帕斯卡三角形的递归方法。过了一段时间我终于开始工作了,但我还是不知道如何到达那里。

public static int[] pascalLine(int order){
    // ska räkna ut n:te linjen i pascals triangel
    int [] arr = new int[order];
    if (order < 0){
        throw new IllegalArgumentException("Value must be greater than 0");
    }
    else if(order == 1){
        return new int [] {1};
    }
    arr[0] = arr[order-1] = 1;
    int [] arrRev = pascalLine(order-1);
    System.out.println(toString(arrRev));
    for (int i = 1; i<arrRev.length; i++){
        arr[i] = arrRev[i-1] + arrRev[i];
    }
    return arr;
}

我将整个三角形打印到第5行。我不明白这是怎么回事。我的思维过程是该方法会调用自己直到它达到0并给出异常。

但也许第一次调用该方法(在main中)仍在进行,而另一个已经启动(在方法内部调用)并且这一直持续到1(仍然不理解为什么它没有&虽然达到零但是达到零。

1 个答案:

答案 0 :(得分:3)

如果对pascalLine的初始调用为order,则只会抛出异常。

else if(order == 1){
    return new int [] {1};
}

递归在order == 1时终止,因此,如果您从积极的order开始,则永远不会达到否定order

pascalLine(order-1)仅在order > 1时调用。