Java binarySearch返回被忽略

时间:2015-02-18 22:57:05

标签: java return binary-search

正如标题所示,我正在编写一些代码来执行Java中的二进制搜索版本。但是,我的return语句被忽略,而函数返回最后一个" catch all" return语句如下所示:

    public int binarySearch(int min, int max) {

        int mid = ((min+max)/2);
        double[][] m1 = createFilledSquareMatrix(mid);
        double[][] m2 = createFilledSquareMatrix(mid);
        double[][] m3 = new double[mid][mid];
        long time = analyzeMultiply(m1, m2, m3);
        if(time == 1000) {
            return mid;
        }
        if (time > 1000) {

            m1 = createFilledSquareMatrix(mid-1);
            m2 = createFilledSquareMatrix(mid-1);
            m3 = new double[mid-1][mid-1];
            time = analyzeMultiply(m1, m2, m3);
            if(time <= 1000) {
                return mid;  //I am reached but ignored
            }
            else {
                binarySearch(min, mid-1);
            }
        }
        else {
            System.out.println("here");
            m1 = createFilledSquareMatrix(mid+1);
            m2 = createFilledSquareMatrix(mid+1);
            m3 = new double[mid+1][mid+1];
            time = analyzeMultiply(m1, m2, m3);
            if(time >= 1000) {
                return mid+1; //I am reached but ignored
            }
            else {
                binarySearch(mid+1, max);
            }
        }

    return -2;

}

所以我评论了被忽略的return语句。我使用调试器并执行返回但是然后转到outter return -2语句然后执行它。我之前从未遇到过这类问题所以我觉得我错过了一些简单的事情。任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:4)

您的方法是递归的。这意味着每次递归时,都需要对递归调用的返回值执行某些操作。你看到的是递归调用到达终止点,返回一个值,然后冒泡回来。但是,由于进行递归调用的实例不会对返回的值执行任何操作,因此它会继续执行,就像没有发生任何事情一样,导致它退回到它所有的&#34;&#34;捕获全部&#34;返回,等等。

例如,

  else {
            binarySearch(min, mid-1);
        }

应该是

   else {
            return binarySearch(min, mid-1);
        }