这是一个非常具体的问题,但希望能帮助我进一步理解递归。
我们应该制作一个打印出帕斯卡三角形的递归方法。过了一段时间我终于开始工作了,但我还是不知道如何到达那里。
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(仍然不理解为什么它没有&虽然达到零但是达到零。
答案 0 :(得分:3)
如果对pascalLine
的初始调用为order
,则只会抛出异常。
else if(order == 1){
return new int [] {1};
}
递归在order == 1
时终止,因此,如果您从积极的order
开始,则永远不会达到否定order
。
pascalLine(order-1)
仅在order > 1
时调用。