2016-02-19 12 views
1

我已經創建了一個程序,它使用遞歸在數組中找到最小值,但它不能正常工作。我不知道爲什麼,但它沒有返回輸出中的實際最低值。這裏是我的代碼:我的遞歸程序找到一個數組中的最小值不起作用

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 
+3

你開始0'的'初始'min'。你如何期望你的陣列中的任何東西都比那個小?將您的起始最小值設置爲「Integer.MAX_VALUE」。 – azurefrog

+0

啊我看到謝謝 –

+1

提供min作爲你的數組的第一個元素。在你的情況下,最小值爲0. – user3509208

回答

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

希望我的幫助作品快樂編碼。

+0

你可能需要將它改爲'if(size == 0)'或者調用'array [size-1]',否則你將得到一個超出界限的索引錯誤或者一個不正確的結果。此外,這是非常低效的,因爲您可以將'mini(array,size-1)'的值存儲在變量中,而不是在'return'語句中調用兩次。例如'int x = mini(array,size-1);返回(數組[大小] Chara

0

解決它的另一個簡單方法是在不改變整個代碼的情況下,當你在main中調用findMin時,開始你的數組的第一個值。

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

代替

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