无法选择逻辑错误

时间:2015-05-01 17:24:29

标签: java recursion logic

我只是用int数组练习二进制搜索,并且无法弄清楚为什么我的逻辑关闭了。我已经跟踪了我的代码,这些都是我的意思。但是代码编译得很好;我错过了一些逻辑。我可以让额外的一双眼睛跟踪我的小段吗?

我认为我不需要返回0;但我不能让我的代码编译而没有在我的其他地方之外返回。

public static void main (String[] args)
    {
        int[] data = new int[]{5,10,15,20,25,30,35,40,45,50,55,60};
        int first = 0;
        int last = data.length;
        int target = 55;
        System.out.print(BinarySearch(data,first,last,target));
    }
    public static int BinarySearch(int[] data, int first, int last,int target)
    {
        if(first > last)
            return -1;
        else{
            int middle = (first+last)/2;
            if(target == data[middle])
                return data[middle];
            else if(target < data[middle])
                BinarySearch(data,first,middle-1,target);
            else
                BinarySearch(data,middle+1,last,target);
        }
      return 0;
    }

1 个答案:

答案 0 :(得分:0)

您忽略了递归调用的结果。

返回递归调用的结果。

return BinarySearch(data,first,middle-1,target);

return BinarySearch(data,middle+1,last,target);

然后你可以删除最后的return 0;;它现在是无法访问的代码。

此外,如果BinarySearch方法返回找到target的位置的索引,则会更有用。 return middle;代替return data[middle]

要在搜索过高的ArrayIndexOutOfBoundsException时避免target,请将data.length - 1分配给last,而不是data.length。最初的firstlast必须是最小可能索引和最大可能索引。