Рекурсивное нахождение среднего в массиве только с одним параметром - PullRequest
0 голосов
/ 21 апреля 2020

Я беру класс в Java, и одно упражнение просит найти среднее (double) в массиве типа int рекурсивно, метод принимает один массив в качестве параметра. Я работал над этим некоторое время и не нашел ответа, кто-то может привести меня в правильном направлении?

Мне удалось сложить все элементы вместе, но, погружаясь по длине массива, я понял, что это меняется каждый раз, когда в метод попадает меньшее значение.

Вот код пока:

public static double findAverage(int[] classRoom) {         
      if(classRoom.length > 0) {
          int grade = classRoom[0];
          int[] newArray = new int[classRoom.length-1]; //create newArray with array length -1
          System.arraycopy(classRoom, 1, newArray, 0, newArray.length); //copy array into array length -1
          return  grade + findAverage(newArray);
      }
      else
         return 0;
}

1 Ответ

0 голосов
/ 21 апреля 2020

Я думаю, это то, что вам нужно:

public static double findAverage(int[] classRoom) {
    if (classRoom.length == 0)
        return 0;

    int grade = classRoom[0];

    if (classRoom.length == 1)
        return grade;

    int[] newArray = new int[classRoom.length-1]; //create newArray with array length -1
    System.arraycopy(classRoom, 1, newArray, 0, newArray.length);//copy array into array length -1 
    return  (grade + findAverage(newArray) * newArray.length) / classRoom.length;
}

В этой последней строке вы делаете average * length, чтобы получить сумму, чтобы вы могли затем сложить текущее значение и затем разделить на общее длина (что, конечно, newArray.length + 1.

Опять же, это не имеет смысла вообще в сценарии реального мира, но просто как академический c вызов.

Как И последнее замечание: «найти» обычно относится к поиску элемента в массиве. В этом случае вы ничего не находите, а просто вычисляете среднее значение, поэтому имя функции мне тоже не подходит.

...