2016-10-06 7 views
0

私はそれが6ではなく2理由を返しその配列でそれを実行しようとしたときに最高値::indexOfMaxInRangeが間違った番号を返しますか?

public static int indexOfMaxInRange(int[] a, int lowIndex, int highIndex){ 
 
     if((highIndex - lowIndex) == 0){ 
 
      return highIndex; 
 
     }else if(a[lowIndex] >= a[highIndex]){ 
 
      return maxInRange(a, lowIndex, highIndex - 1); 
 
     }else{ 
 
      return maxInRange(a, lowIndex + 1, highIndex); 
 
     } 
 
    } 
 
public static void main(String[] args) { 
 
     int[] a = new int[5]; 
 
     a[0] = 4; 
 
     a[1] = 3; 
 
     a[2] = 6; 
 
     a[3] = 4; 
 
     a[4] = 2; 
 
     System.out.println(indexOfMaxInRange(a, 0, a.length - 1)); 
 
    }
と配列のインデックスを返す必要があり、このメソッドを持っています? ありがとうございます。

+1

メソッドと呼ばれている 'indexOfMaxInRange'を返しますが、それはmaxInRange' – agilob

+2

'から値を返します。 show maxInRange' –

+1

これは動作するはずの 'indexOfMaxInRange'への再帰呼び出しでなければなりません – AxelH

答えて

1
public static int indexOfMaxInRange(int[] a, int lowIndex, int highIndex){ 
    if((highIndex - lowIndex) == 0){ 
     return highIndex; 
    }else if(a[lowIndex] >= a[highIndex]){ 
     //Changed to recursive call 
     return indexOfMaxInRange(a, lowIndex, highIndex - 1); 
    }else{ 
     //Changed to recursive call 
     return indexOfMaxInRange(a, lowIndex + 1, highIndex); 
    } 
} 
public static void main(String[] args) { 
    int[] a = new int[5]; 
    a[0] = 4; 
    a[1] = 3; 
    a[2] = 6; 
    a[3] = 4; 
    a[4] = 2; 
    System.out.println(indexOfMaxInRange(a, 0, a.length - 1)); 
} 

再帰呼び出しを伴うこのスニペットは完全に機能します。

+1

私はこれがOPのやりたいことだと思っていますが、その部分からTypoかもしれないので、修正を強調する必要があります。彼のコードを読むのは初めてでした。 – AxelH

+0

ありがとうございます。 :) – null

1

再帰的な変更を使用する場合は、maxInRange~indexOfMaxInRangeが問題ありません。

そして、もう一つの方法、最大値の代わりにrecursive.Checkのforループを使用して、インデックスを追跡し、

public static int indexOfMaxInRange(int[] a, int lowIndex, int highIndex) { 
     int maxIndex = 0; 
     int maxVal = a[0]; 
     for (int i = 0; i < a.length; i++) { 
      if(maxVal < a[i]){ 
       maxVal = a[i]; 
       maxIndex=i; 
      } 
     } 
     return maxIndex; 
    } 
+2

私は '再帰的にもっと楽しい 'と言うでしょう;) – AxelH

関連する問題