2017-09-29 15 views
-3

ソートされていない配列があれば、最大値と最小値を見つけます。私はこれを再帰的に行い、分割して征服する方法を試みていますが、スタックオーバーフローエラーが続きます。私はデバッグし、私は再帰呼び出しでエラーを受け取り続けますが、何が間違っているのか、それを修正する方法はわかりません。再帰スタックオーバーフローエラー

私は静的な最小と最大の変数を持っています。

ありがとうございました!ここで

static void findMaxMin(int[] array, int start, int end) 
{ 
    if (end == 2) 
    { 
     setMaxMin(array); 
    } 
    else 
    { 
     int mid = ((end)/2); 
     findMaxMin(array, start, mid); 
     findMaxMin(array, mid + 1, end); 
    } 
} 
private static void setMaxMin(int[] array) 
{ 
    if (array[0] > array[1]) 
    { 
     max = array[0]; 
     min = array[1]; 
    } 
    else 
    { 
     min = array[0]; 
     max = array[1]; 
    } 
} 
+0

あなたが出口点が欠落しているようだ、あなたは時にコードがすべき伝える必要がありますやめる。たとえば、start> = endです。 – Prisoner

+0

私は再帰の基本条件に疑いがあります。 –

+0

まあ 'setMaxMin'は最初の2つのインデックスだけを見ているので、配列がもっと長い場合、正確にはどうなるでしょうか? – juharr

答えて

0

は(再帰なし)それを行うための1つの簡単な方法です:私はここにパラメータを使用していることに注意して

void FindMinAndMaxValues(int[] array out int min, out int max) 
{ 
    min = int.MaxValue, 
    max = int.MinValue; 

    foreach(var val in array) 
    { 
     max = (val > max) ? val : max; 
     min = (val < min) ? val : min; 
    } 
} 

してください。これは、コードを簡単にするために行われます。通常、私は指定されたクラスまたはtupleを返すことを好むでしょう。

また、LINQを使用することができますminmax拡張メソッドを持っている - ので、全体の事はこのようなものになります:

var max = array.Max(); 
var min = array.Min(); 
関連する問題