Вот код:
public static int maxPathLengthHelper(int[][] paths, int x, int y){
int maxLength = 0;
if(x > 0 && paths[x-1][y] == 1){
int currentLength = 1 + maxPathLengthHelper(paths,x-1,y);
if(currentLength > maxLength){
maxLength = currentLength;
}
}
if(y > 0 && paths[x][y-1] == 1){
int currentLength = 1 + maxPathLengthHelper(paths,x,y-1);
if(currentLength > maxLength){
maxLength = currentLength;
}
}
if(x < paths.length - 1 && paths[x+1][y] == 1){
int currentLength = 1 + maxPathLengthHelper(paths,x+1,y);
if(currentLength > maxLength){
maxLength = currentLength;
}
}
if(y < paths[0].length - 1 && paths[x][y+1] == 1){
int currentLength = 1 + maxPathLengthHelper(paths,x,y+1);
if(currentLength > maxLength){
maxLength = currentLength;
}
}
return maxLength;
}
В операторах if, где значение y изменено, возникает ошибка переполнения стека, однако в частях, где значение x изменяется, ошибки нет. Мне было интересно, почему это было;если бы оба были неправильными, я бы все изменил, но это только во втором и четвертом, если утверждения, что ошибки переполнения стека вызваны рекурсивным вызовом. Первое и третье, если заявления не имеют проблем, и я абсолютно не представляю, что в них отличается.