Я создал программу, которая находит минимальное значение в массиве с помощью рекурсии, но она работает не так, как я планировал. Я не знаю почему, но он не возвращает самое низкое значение в моем выводе. Вот мой код:

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;
    }
}

Мой вывод:

The Minimum Value in this Array is 0 at Index 0
Minimum is :0
1
John Smith 19 Фев 2016 в 20:00

2 ответа

Лучший ответ

Измените минимальное значение в своем коде, и вот очень оптимизированный код для выполнения этой обратной работы

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);
    }
}

Надеюсь, моя помощь сработает, счастливое кодирование.

2
SmashCode 19 Фев 2016 в 17:07

Еще один простой способ исправить это без изменения всего кода - запустить min с первого значения вашего массива, когда вы вызвали findMin в main.

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

Вместо того

System.out.println("Minimum is :" + m.findMin(arr, 0, min));
0
milk9111 19 Фев 2016 в 19:20