这是一个非常具体的问题,但希望能帮助我进一步理解递归。
我们应该创建一个递归方法来打印帕斯卡三角形。一段时间后我终于让它工作了,但我仍然不太明白我是如何到达那里的。
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(仍然不明白为什么它不但达到零)。
最佳答案
如果对 pascalLine
的初始调用具有负顺序
,它只会抛出异常。
else if(order == 1){
return new int [] {1};
}
递归在 order == 1
时终止,因此,如果您以正order
开始,则永远无法达到负order
。
pascalLine(order-1)
仅在 order > 1
时调用。
关于java - 理解我创建的递归方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28478380/