【发布时间】:2023-04-06 16:04:01
【问题描述】:
所以我想知道,在我的书中,递归二分搜索是这样实现的:
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:键不在数组中,其值介于a[ 0] 和 a[n-1]。这里确定键不在数组中的比较次数等于指数。比最坏情况下的比较会少一次。"
但是当我坐下来使用数组 {1,2,3,4,5,6,7,9} 和键 8 找到函数调用的次数时,调用次数是 4。书上说COMPARISONS 的数量是 3(不包括我猜的第 3 行?),但我很确定函数调用的数量是 4。我还将它推广到二进制搜索的迭代实现,并推广了迭代或递归函数调用总是 floor(log base 2 ( n ) ) + 1。
能解释一下这里发生了什么吗?
【问题讨论】:
标签: java search binary-search