我编写了一个二进制搜索算法,我对这里的逻辑有点不理解;我正在检查这个列表是否包含带有递归函数"containsDigit“的中间元素67的值。在本例中,67是结果部分中的列表值,输入if语句,但是由于某种原因,没有返回'true‘,而是函数选择为false。
有人能告诉我这是为什么吗?
import java.util.Arrays;
public class Binary {
public boolean containsDigit (int [] numlist, int digit){
int middle = (int )Math.ceil(numlist.length/2);
int middle_val = numlist[middle];
System.out.println(Arrays.toString(numlist));
System.out.println(digit);
System.out.println(middle_val);
if (middle_val == digit){
System.out.println("should return true here");
return true;
}
else if (numlist[middle]>digit){
containsDigit(Arrays.copyOfRange(numlist,0, middle-1), digit);
}
else if (numlist[middle]<digit){
containsDigit(Arrays.copyOfRange(numlist,middle+1, numlist.length), digit);
}
return false;
}
public static void main(String[] args) {
Binary obj = new Binary();
int [] numlist = {1, 2, 3, 5, 23, 67, 90};
boolean contains = obj.containsDigit(numlist, 67);
System.out.println("returns "+contains);
}
}结果:

编辑:
我找出了原因,我没有返回函数结果,所以在找到真后没有函数中断,它选择了false,谢谢您的帮助!
发布于 2021-02-11 06:49:11
您没有使用递归调用返回的值。
在代码的这一部分中的示例:
else if (numlist[middle]<digit){
containsDigit(Arrays.copyOfRange(numlist,middle+1, numlist.length), digit);
}
return false;containsDigit的返回值根本不被使用--即使调用在true中产生,在最后总是返回false。
必须测试数组是否只有一个值来停止递归,如果这是正确的value;
上发生了什么
https://stackoverflow.com/questions/66149916
复制相似问题