Учитывая последовательность целых чисел, как я могу найти среднее значение с помощью подхода divide and conquer? Я должен написать метод «double avg (int [] a, int l, int r)», который находит среднее значение в массиве A, охватывающее от «l» до «r» в качестве домашней работы, но я получаю StackOverflowError на первый рекурсивный вызов - не во втором, хотя! - моего кода, и я не могу понять, почему. Кроме того, я уверен, что это не дает мне истинного среднего значения, но я не нашел возможности проверить среднее значение последовательности, используя разделение и победить. Вот мой код:Среднее число целых чисел, использующих divide и conquer
public class Average {
public static void main(String[] args) {
int[] A = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20};
int l = 0;
int r = A.length-1;
System.out.println("Average of the array: "+averageCheck(A, l, r));
}
public static double averageCheck(int[] A, int l, int r) {
if (l==r) {
return A[l];
}
// Base Case: if there's just a single element it is the average of the array itself
int mid = (l+r)/2;
double avLeft = 0;
double avRight = 0;
avLeft = A[l]/r + averageCheck(A, l, mid);
avRight = A[mid+1]/r + averageCheck(A, mid+2, r);
double average = ((avLeft*mid) + (avRight * (r-mid))) /r;
return average;
}
}
(не причина 'StackOverflowError') Среднее значение последовательности целых чисел является сумма делится на длину. Не делайте разделения до конца. Особенно не делятся на 'r', это бессмысленно. –
Два подсказки: рассмотрите возможность написания модульного теста - такой код подходит для этого. Для самого исключения ... это обычно означает, что вы создали бесконечную рекурсию. Значение: в вашем коде отсутствуют условия для ** остановки ** рекурсии. Итак, первый шаг: добавьте операторы печати для своих переменных и/или запустите их в отладчике. – GhostCat
@ AndyTurner, я где-то читал, что сумма элемента/длины для каждого элемента средняя, поэтому я подумал, что это реально. Я попробую с нормальным средним сейчас, но еще сложнее представить его рекурсивно. – Monok