2017-09-29 7 views
-3

정렬되지 않은 배열에서 최대 값과 최소값을 찾습니다. 재귀, 나누기 및 정복 방식으로이 작업을 수행하려고하지만 스택 오버플로 오류가 계속 발생합니다. 디버깅을하고 재귀 호출에서 오류가 계속 발생하지만 잘못되었거나 오류를 수정하는 방법을 알지 못합니다.재귀 - 스택 오버플로 오류

나는 정적 변수와 최대 변수를 가지고있다.

정보 및 도움을 제공해 주셔서 감사합니다!

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

내가 여기 매개 변수를 사용하고 있습니다 :

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'은 처음 두 개의 인덱스만을 살펴본 것이므로 배열이 길면 정확하게 작동 할 것입니다. – juharr

답변

0

여기 (재귀없이)을 할 수있는 간단한 방법입니다. 이것은 코드의 단순화를 위해 수행됩니다. 일반적으로 지정된 클래스 나 tuple을 반환하는 것이 좋습니다. 또한

, LINQ 사용할 수 minmax 확장 방법이있다 - 그래서 전체 것은이 같은으로 변 :

var max = array.Max(); 
var min = array.Min();