返回语句后方法不会退出

时间:2016-09-30 18:41:56

标签: java arrays return median-of-medians

使用中位数算法选择一个用于在数组中找到第k个最小元素的数据集的方法;但是在返回后似乎没有退出pickCleverPivot:

return median(A,left,right);

如果有帮助,假设最初左边是0,右边是9,A是{1,2,3,4,5,6,7,8,9,10}。

以下是方法:

private static int pickCleverPivot(int left, int right, int[] A){

    int index = 0;                                                  
    if((right-left) <= 5){                                          
        return median(A,left,right);
    }

    for(int i = 0; i < (A.length+5-1)/5; i++){      //Ceiling of n/5 = (A.length+5-1)/5). 

        int R = left+4;  
        if(R > right){
            R = right;                                              
        }

        int med_index = median_index(A,left,R);

        swap(A, med_index, index);
        index++;
        left +=5;
    }

    left = 0;
    return pickCleverPivot(left, left+(A.length+5-1)/5, A);

}

3 个答案:

答案 0 :(得分:2)

您的代码无法忽略return语句。

也许你创造了一个无限循环? 如果要在代码中找到错误,只需添加大量打印语句即可。例如,在返回之前打印所有方法的返回值。

如果您仍然无法找到错误,则应发布所有代码,以便我们能够自行运行您的代码。

答案 1 :(得分:0)

我要说,进行逐步调试,最有可能的是,有一个无限循环导致返回停止从方法返回。或者,粘贴完整的代码,我可以尝试找到错误。

答案 2 :(得分:0)

我想我找到了一些东西:

每次对函数进行递归调用时,都会使用相同的参数。 A保持相同的值,因为right - left < 5始终是相同的数组。因此,如果它大于5,则永远不会逃避递归函数,因为to_sql将始终为false。