Хорошо, пока это не вышло из-под контроля, вот простое итеративное и эквивалентное ему рекурсивное решение - реализованное с помощью int, хотя, поэтому вам придется немного его изменить;)
public static int getLargest(int[] vals) {
int max = vals[0];
for (int i = 1; i < vals.length; i++) {
max = Math.max(max, vals[i]);
}
return max;
}
public static int getLargestRec(int[] vals) {
return getLargestRec(vals, 0, vals.length);
}
private static int getLargestRec(int[] vals, int low, int high) {
if (low + 1 == high) {
return vals[low];
}
int middle = low + (high - low) / 2;
int left = getLargestRec(vals, low, middle);
int right = getLargestRec(vals, middle, high);
return Math.max(left, right);
}
public static void main(String[] args) {
int[] vals = {5, 23, 32, -5, 4, 6};
System.out.println(getLargestRec(vals));
System.out.println(getLargest(vals));
}
Обратите внимание, что, как обычно для рекурсивных задач, нижняя граница является включающей, а верхняя - исключительной. Также мы могли бы реализовать это и по-другому, но обычный подход «разделяй и властвуй» довольно полезен и прекрасно подходит для распараллеливания с помощью структуры fork, так что это нормально. (И да для пустого массива обе версии потерпят неудачу)