Java - 递归以查找数组

时间:2018-01-08 14:42:43

标签: java arrays algorithm recursion

所以我有这个问题,在数组中找到2个最小的数字,但我必须使用递归(递归部分是本练习的一部分)。 我开始考虑如何做到这一点,我试图做的“计划”是这样的,首先找到数组中最小的,然后标记我找到它的位置,然后将数组拆分为2组并搜索这两个群体的可能性从他们那里得到最低限度。

这是我到目前为止的代码:

public static int MinRecu2(int[] a) {
    if (a.length == 1)
        return a[0];
    int min = a[0];
    int min2;
    int mark = 0;

    // Find first min
    for (int i = 1; i < a.length; i++) {
        if (a[i] < min) {
            min = a[i];
            mark = i;
        }
    }

    int [] help1= new int [mark+1];
    int [] help2= new int [a.length-mark];
    help1=Arrays.copyOfRange(a, 0, mark);
    help2=Arrays.copyOfRange(a, mark+1, a.length-1);

    // Find second min
    min2 = Math.min(MinRecu2(help1), MinRecu2(help2));

    return min;
}

我知道代码不起作用,而我试图做的“递归”很糟糕,但我是如何试图让我的思考代码

2 个答案:

答案 0 :(得分:0)

这是解决问题的方法。

glP

此函数表示在[s,e]中的public static int[] twoSmallest(int[] arr, int s, int e) { int[] list; if (e - s <= 3) { // maybe 2 or 3 list = new int[e - s]; for (int i = s; i < e; i++) list[i - s] = arr[i]; } else { int[] left = twoSmallest(arr, s, (s + e) / 2); int[] right = twoSmallest(arr, (s + e) / 2, e); list = new int[4]; list[0] = left[0]; list[1] = left[1]; list[2] = right[0]; list[3] = right[1]; } Arrays.sort(list); return new int[] {list[0], list[1]}; } 中找到两个最小的数字。你可以这样打电话:

arr

答案 1 :(得分:-1)

private static int findMinFromArray(int[] iArray, int index, int min) {
    if(index <= (iArray.length - 1)){
        if(iArray[index] < min){
            min = iArray[index];
        }
        System.out.println("Before: " + "Index = " + index + " | Min = " + min);
        findMinFromArray(iArray, index + 1, min);
    }
    System.out.println("After: " + "Index = " + index + " | Min = " + min);
    return min;
}

我不确定如何让程序停止,而不是像它正在做的那样再次回来。这只能找到最小的。