Java 我在数组中查找最小值的递归程序不起作用

Java 我在数组中查找最小值的递归程序不起作用,java,arrays,recursion,Java,Arrays,Recursion,我已经创建了一个程序,使用递归在数组中查找最小值,但它并没有按照我的预期工作。我不知道为什么,但它没有返回我输出中的实际最低值。这是我的密码: package weekFour; public class MinInt { static int[] arr = {24,52,74,9,34,23,64,34}; static int min; static int minIndex; public static void main(String[] args

我已经创建了一个程序,使用递归在数组中查找最小值,但它并没有按照我的预期工作。我不知道为什么,但它没有返回我输出中的实际最低值。这是我的密码:

package weekFour;

public class MinInt {

    static int[] arr = {24,52,74,9,34,23,64,34};
    static int min;
    static int minIndex;

    public static void main(String[] args){
    MinInt m = new MinInt();
    System.out.println("Minimum is :" + m.findMin(arr, 0, min));
    }

    public int findMin(int[] arr, int index, int min){
        if(index <= (arr.length - 1)){    //makes sure you only check elements in the array
            if(arr[index] < min){        //if value is smaller than current min
                min = arr[index];        //set new min
                minIndex = index;        //records position of min in array
            }
            return findMin(arr, index + 1, min);   //recursive method call
        }
        System.out.println("The Minimum Value in this Array is " + min + " at Index " + minIndex);
        return min;
    }
}

更改代码中的最小值,这里是非常优化的代码,用于执行此反向工作

int mini(int array[], int size) {
    if (size == 1) {
        return array[0];
    }
    else {
        return (array[size] < mini(array, size - 1)) ? array[size]: mini(array, size - 1);
    }
}
intmini(int数组[],int大小){
如果(大小==1){
返回数组[0];
}
否则{
返回(数组[size]

希望我的帮助能很好地进行编码。

另一种在不更改整个代码的情况下修复它的简单方法是,在调用main中的findMin时,在数组的第一个值处启动min

System.out.println("Minimum is :" + m.findMin(arr, 0, arr[0]));
而不是

System.out.println("Minimum is :" + m.findMin(arr, 0, min));

0
的初始
min
开始。您如何期望阵列中的任何内容都小于此值?将起始最小值设置为
整数。最大值
。将最小值作为数组的第一个元素。在本例中,最小值为0。如果(size==0),则需要将其更改为
,或者调用
数组[size-1]
,否则将得到索引越界错误或不正确的结果。此外,这是非常低效的,因为您可以将
mini(array,size-1)
的值存储在变量中,而不是在
return
语句中调用它两次。e、 g.
int x=mini(数组,大小为1);返回(数组[大小]
System.out.println("Minimum is :" + m.findMin(arr, 0, min));