Поэтому мне было интересно, что в моей книге рекурсивный бинарный поиск реализован следующим образом:
private static int bin(int[] arr, int low, int high, int target){
counter++; //ignore this, it was to count how many calls this function invocated
if(low > high) return -1;
else{
int mid = (low+high) / 2;
if(target == arr[mid]) return mid;
else if(target < arr[mid]) return bin(arr, low, mid-1, target);
else return bin(arr, mid + 1, high, target);
}
}
И в нем говорится, что «если n, количество элементов, является степенью 2, выразите n как степень 2 ... Случай 3: ключ не находится в массиве, и его значение находится между [ 0] и a [n-1]. Здесь число сравнений, определяющих, что ключа нет в массиве, равно показателю степени. Сравнений будет на одно меньше, чем в худшем случае. "
Но когда я сел и нашел количество вызовов функций, используя массив {1,2,3,4,5,6,7,9} и клавишу 8, количество вызовов было 4. В книге сказано: количество СРАВНЕНИЙ равно 3 (что исключает 3-ю строку, которую я предполагаю?), но я почти уверен, что количество вызовов функций равно 4. Я также обобщил это для итеративной реализации бинарного поиска и обобщил, что число Итерации, или рекурсивные вызовы функций, всегда пола (лог базы 2 (n)) + 1.
Можете объяснить, что здесь происходит?