2017-09-29 120 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

看來你已經錯過了出口點,你需要知道什麼時候該代碼應停止。例如,開始> =結束。 – Prisoner

+0

我懷疑你的遞歸基礎條件。 –

+0

那麼'setMaxMin'只能查看前兩個索引,所以如果數組更長,那麼它將如何工作, – juharr

回答

0

這裏有一個簡單的方法來做到這一點(不遞歸):

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