繁体   English   中英

使用递归的二进制搜索

[英]Binary Search using Recursion

    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;
}

我想通过数组搜索ARR递归找到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

我知道如何使用迭代来做到这一点,但是我是递归方法的新手。 我对此表示感谢。

关键是通过将修改后的lowhigh传递给下一个递归调用来更新lowhigh ,从而更新搜索范围。 每次调用时,我们都会根据inqarr[mid]之间的比较将搜索范围更新为[low, mid-1][mid+1, high] 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);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM