public static int binarySearch(double[] arr, int low, int high, double inq){
int mid = (low + high)/2;
if(arr == null) return -1;
if(low > high) return -1;
if(arr[(int)inq] < arr[low])
return -1;
if(arr[(int)inq] > arr[high])
return -1;
}
我想递归搜索整个数组以找到inq的索引。我所拥有的只是解雇案件。不知道如何解决这个问题。
最初的问题是这个:
在数组切片
arr[low:high]
中搜索是否出现的inq。如果inq出现在arr中,则返回索引i
arr[i] == inq
。否则,返回-1。假设arr以递增顺序排序。这些是某些情况的答案:
输入数组为table = {2,4,6,8,10,12,14}。
在表[0:6]的索引0处找到2
在表[0:6]的索引-1中发现3
在表[2:6]的索引-1中找到4
在表[2:5]的索引5中找到12
我知道如何使用迭代来做到这一点,但是我是递归方法的新手。我很乐意为此提供任何帮助。
最佳答案
关键是通过将修改后的low
和high
传递到下一个递归调用中来更新low
和high
,从而更新搜索范围。每次通话时,我们都会根据[low, mid-1]
和[mid+1, high]
之间的比较将搜索范围更新为inq
或arr[mid]
这将起作用:
public static int binarySearch(double[] arr, int low, int high, double inq){
int mid = (low + high)/2;
if(arr == null || low > high) return -1;
if(arr[mid] == inq) return mid;
if(arr[mid] < inq) { // inq is in the upper half
return binarySearch(arr, mid+1, high, inq);
}
if(arr[mid] > inq) { // inq is in the lower half
return binarySearch(arr, low, mid-1, inq);
}
}