对于输入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");
}
}
答案 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);
}
}