Рекурсивное нахождение длины массива в Java

#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