#java #recursion
#Ява #рекурсия
Вопрос:
Я пытаюсь создать метод, который рекурсивно возвращает длину массива (в качестве учебного упражнения). Я попытался передать массив длины 4, но метод просто возвращает 1. Я также попытался вызвать рекурсивный метод за пределами оператора if, и это просто приводит к ошибке stackoverflowerr. Почему этот метод возвращает единицу и как я могу заставить его вернуть правильную длину?
public static int findArrayLength(int i, int length, int[] array) { if(i lt; array.length) { length = 1; i ; findArrayLength(i, length, array); } return length; }
Комментарии:
1.
findArrayLength(i, length, array);
-gt;return findArrayLength(i, length, array);
2. Ух ты, это сработало. Однако почему именно мой код не работает?
3. Потому что вы вызываете метод рекурсивно, но отбрасываете результат и просто возвращаете первый
length
, который есть1
.
Ответ №1:
Вы не используете результат рекурсивного вызова, также вы можете заменить приращение 1
внутри рекурсивного вызова, и i
и length
делаете то же самое, оставьте только один
public static int findArrayLength(int i, int[] array) { if (i lt; array.length) { return findArrayLength(i 1, array); } return i; }
System.out.println(findArrayLength(0, new int[]{1, 1, 1})); // 3 System.out.println(findArrayLength(0, new int[]{1, 1, 1, 1})); // 4 System.out.println(findArrayLength(0, new int[]{1, 1, 1, 1, 1})); // 5