Это просто классическая проблема бинарного поиска. Из того, что я могу почерпнуть, посмотрев на ваш код, вы, похоже, увязли в логике, используемой для выполнения каждого рекурсивного вызова левого и правого подмассивов текущего массива. Логика, которую я использовал ниже, состоит в том, чтобы взять все от начала до (начало + конец) / 2 для левой рекурсии, и все от ((начало + конец) / 2) + 1 до конца для правой рекурсии. Это гарантирует, что никогда не будет перекрытия.
Базовый случай возникает, когда алгоритм оказывается на одной записи в массиве. В этом случае мы просто возвращаем это значение и больше не рекурсивно.
private static int dC(int[] a, int start, int end) {
if (start == end) return a[start];
int left = dC(a, start, (start+end)/2);
int right = dC(a, ((start+end)/2) + 1, end);
return left < right ? left : right;
}
public static void main(String args[])
{
int[] a = {10, 3, 74, 0, 99, 9, 13};
System.out.println(dC(a, 0, 6)); // prints 0
}
Демо
Примечание: я понятия не имею, какую роль здесь сыграет Math.floor
, поскольку вы используете массивы целых чисел, а не двойных или плавающих. Я удалил это, потому что не видел в этом необходимости.