java中的递归二进制方法不起作用

java中的递归二进制方法不起作用,java,arrays,if-statement,recursion,binary-search-tree,Java,Arrays,If Statement,Recursion,Binary Search Tree,这是一个用递归方法进行二进制搜索的Java程序。它接受一个数组和一个搜索变量 我知道有什么不对劲,但我不确定是什么。 我做错了什么?如何改变它 public static int binary(int arr[], int target) { int start = 0; int end = arr.length; int mid = (start+end)/2; if(end<start) { return -1; }

这是一个用递归方法进行二进制搜索的Java程序。它接受一个数组和一个搜索变量

我知道有什么不对劲,但我不确定是什么。 我做错了什么?如何改变它

public static int binary(int arr[], int target) {
    int start = 0;
    int end = arr.length;
    int mid = (start+end)/2;

    if(end<start) {
        return -1;
    }

    if (arr[mid] == target) {
        return mid;
    }
    else if (arr[mid] > target) {
        start = mid + 1;
        int[] newArr = new int[end];
        for(int i=start;i<end;i++) {
            int j=0;
            newArr[0] = arr[i];
            j++;
        }
        return binary(newArr,target);
    } else {
        end = mid - 1;
        int[] newArr = new int[end];
        for(int i=start;i<end;i++) {
            newArr[i] = arr[i];
        }
        return binary(newArr,target);
    }
}
公共静态int二进制(int-arr[],int-target){
int start=0;
int end=阵列长度;
int mid=(开始+结束)/2;
如果(最终目标){
开始=中间+1;
int[]newArr=新int[end];

对于(int i=start;i我将指出,通过将数组的一部分复制到一个新的较小数组中,您正在削弱进行二进制搜索的价值。一个良好实现的二进制搜索在O(log(n))时间内运行,而您在这里所做的是在O(n)时间内运行。相反,如果您希望递归实现二进制搜索,您应该只传递原始数组和当前正在考虑的上下限

也就是说,您的代码甚至无法得到正确答案,更不用说快速得到答案了,这是由于一些不同的bug造成的

  • 假设数组是按升序预先排序的(如果数组不是按顺序排序的,则二进制搜索根本无法工作),则存在中点大于目标值和中点小于目标值的情况
  • 您用于复制高端阵列的代码存在一些问题。请注意,如果您复制的是阵列的一部分,则您的二进制搜索不正确。也就是说,这种情况下的阵列复制代码只写入新阵列的起始索引
    [0]
    而不是同时沿着新阵列和旧阵列行走

如果您在问题中发布a,而不是某个代码的图片,您更有可能获得帮助;并详细描述您遇到的问题。请仅将您的问题放在标题中,然后给出详细信息。在此处共享代码将帮助想回答您问题的人。请将您的代码作为文本而不是图像发布!代码已经发布了!如果你可以重写要做的更改,我可能会更好地理解有没有任何方法可以递归地执行,而不通过上下限?