二进制搜索提供不正确的输出

时间:2016-10-12 13:09:45

标签: java binary-search

对于输入binarySearch(2,A,9),其中A = {2,6,7,7,11,15,25,37,45},程序给出输出“Not Present”,当它应该给“现在”。 我做错了什么?

这是我的代码:

String binarySearch(int x, int[] A, int n)
{
    if(n==0)
        return ("Not present");
    else
    {
        int mid = n/2;
        if(x==A[mid])
            return ("Present");
        else if (x<A[mid])
            binarySearch(x, Arrays.copyOfRange(A,0,mid),mid);
        else
            binarySearch(x, Arrays.copyOfRange(A,mid,n),n-mid);

        return ("Not present");
    }
}

3 个答案:

答案 0 :(得分:1)

在递归调用中缺少return语句:

else if (x<A[mid])
    return binarySearch(x, Arrays.copyOfRange(A,0,mid),mid);
else
    return binarySearch(x, Arrays.copyOfRange(A,mid,n),n-mid);

答案 1 :(得分:0)

你需要返回递归调用

{{1}}

答案 2 :(得分:-1)

您忘记添加return语句以及else if递归调用 因为现在只有在中间找到Present时它才会返回x,其余的调用有效,但不会返回任何内容,所以它应该是

static String binarySearch(int x, int[] A, int n)
{
    if(n==0)
        return ("Not present");
    else
    {
        int mid = n/2;
        if(x==A[mid])
            return ("Present");
        else if (x<A[mid])
            return binarySearch(x, Arrays.copyOfRange(A,0,mid),mid);
        else
            return binarySearch(x, Arrays.copyOfRange(A,mid,n),n-mid);

    }
}