使用递归来查找最小的int数组?

时间:2016-03-21 19:27:26

标签: arrays recursion

这是我的代码。

public static void main(String[] args) {


    int[] array = {5,3,1,0,4,7};
    int smallest = array[0];
    System.out.println(smallest(array,smallest));



}


private static int smallest(int[] array, int smallest){

    int count = 0;
    if(array[count] < smallest){
        smallest = array[count];
    }
    else if(array[count] == array[array.length-1]){
        return smallest;
    }
    count++;
    return smallest(array,smallest);

}

}

我需要使用java来使用RECURSION查找数组中的最小int,我知道如何使用迭代来查找它,但这是严格的递归。任何帮助都会被贬低..这个错误似乎在我这里。

- &GT;返回最小(数组,最小);

3 个答案:

答案 0 :(得分:0)

问题是变量的一个版本&#34; count&#34;是在&#34;最小的&#34;的每次通话中创建的。并且将0分配给它,所以在调用&#34;最小的&#34;之前增加它的值并不重要。再次。 在函数内部创建的变量不会在函数调用之间共享。

你遇到的问题是因为&#34;计数&#34;始终为0且递归永远不会结束,因此它以堆栈溢出错误结束。

要解决这个问题,你必须添加另一个参数&#34; count&#34;,它将保存算法的迭代次数。

public static void main(String[] args) {


int[] array = {5,3,1,0,4,7};
int smallest = array[0];
System.out.println(smallest(array,smallest,0));



}


private static int smallest(int[] array, int smallest, int count){

if(array[count] < smallest){
    smallest = array[count];
}
else if(array[count] == array[array.length-1]){
    return smallest;
}

return smallest(array,smallest,count+1);

}

答案 1 :(得分:0)

除非您的代码进入ifelse if块,否则它将继续前进并再次调用最小值。由于传递完全相同的参数,因此得到的结果完全相同。 记住count是一个局部变量。

此外,我认为您可能需要if而不是else if,因为如果最后一个数字较小,您可能会遇到异常。

答案 2 :(得分:0)

当你有两个数字时,你只需要比较它们就可以找到最小数字。因此,如果将数组拆分为两个,则在每一半中找到最小数组,然后只比较结果以找到最小数。以下是递归的概述(注意:我没有编译或测试它):

int getSmallest(ArrayList<Integer> numbers) { if (numbers.size() == 1) return numbers.get(0); int leftMin = getSmallest(numbers.subList(0, numbers.size()/2); int rightMin = getSmallest(numbers.subList(numbers.size()/2, numbers.size()); return leftMin < rightMin ? leftMin : rightMin; }

如果你需要使用int [],你仍然可以使用相同的方法,它只需要一些调整:)