Это довольно конкретный вопрос, но, надеюсь, поможет мне понять рекурсию немного дальше.Понимание рекурсивного метода, который я создал
Мы должны были сделать рекурсивный метод, который напечатал треугольник паскалей. Через некоторое время я, наконец, получил его работу, но я все еще не совсем понимаю, как я туда попал.
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 и не даст исключение.
Но, возможно, первое вызов метода (в основном) по-прежнему продолжается, а другой запускается (при вызове внутри метода), и это продолжается до 1 (все еще не понимает, почему это не делает) t достигает нуля, хотя).
Примечание: проверьте «заказ» перед тем, как использовать его, а также проверьте, если он равен * нулю. – RealSkeptic
Просто комментарий, вы должны проверить 'order', прежде чем создавать' int [] arr' с размером 'order', вы можете получить' NegativeArraySizeException'. –