在这种情况下,该值确实匹配,并且布尔值设置为true,但是两次调用return并将值更新为false。有人可以建议我在这里缺少什么吗?

public class BinSearch {

    public static void main(String[] args) {

        BinSearch bin=new BinSearch();
        int arr[]= {2,4,6,8,10,12,14,16};
        boolean b=bin.binSearch(arr,0,arr.length-1,12);
        System.out.println("Number found "+b);

    }

    public  boolean binSearch(int arr[],int low,int high,int val)
    {
        int mid=(low+high)/2;

        if(arr[mid]==val)
        {
            return true;
        }

        else if(arr[mid]>val)
        {
            binSearch(arr,mid+1,high,val);
        }

        else
        {
            binSearch(arr,low+1,mid,val);
        }

        return false;
    }
}

最佳答案

调用递归时,您缺少两个返回值:

return binSearch(...);

如果不编写它们,则该方法将忽略递归的结果,仅在最后返回false。之后,最后一个return将不再需要,应删除。最后,您需要检查low > high的大小写,这意味着未找到该元素。

10-08 18:29