2014-11-06 2 views
-1

벡터에서 최대 값을 찾는 재귀 적 메서드를 만드는 데 도움이 필요합니다. 메서드에는 다음과 같은 서명이 있어야합니다.배열의 재귀 적 메서드에서 최대 int 값 찾기

public int max(int[] v) 

그리고 개인적인 도움 방법을 사용하십시오.

그러나
private int biggest(int a, int b){ 
    if(a > b){ 
     return a; 
    } 
    else{ 
     return b; 
    } 
} 

public int maxRecursive(int[] v){ 
    if(v.length > 1){ 
     return biggest(v[0], maxRecursive(Arrays.copyOfRange(v, 1, v.length - 1))); 
    } 
    else{ 
     return v[0]; 
    } 
} 

, 모든이가 배열의 중간 값을 반환한다 할 것 같다 :

여기 내가 사용하려고 해요 방법입니다. 예 : 배열이`{1,2,3,5,6,7,8} 인 경우 메서드는 5를 반환합니다.

+1

당신이 벡터에서 찾을 수있다, 그러나 당신의 코드는 당신이 원시적 배열을 통해 검색을 보여줍니다 말한다. 무엇 이니? 또한, 왜 이것을 재귀 적으로 수행할까요? 그건 의미가 없습니다. 그냥 직선 선형 실행하십시오. –

+0

프로그래밍 수업을 듣고 있는데, 이것은 과제 중 하나입니다. 반복적 인 것을 만들지 만 재귀 적 방법에 붙어 있습니다. –

+0

그리고 크기가 0 인 배열을 어떻게 처리해야합니까? – fge

답변

0

copyOfRange이 잘못 사용 중이기 때문에 불편을 듭니다. 그것은해야 다음 to 인수가 독점 때문에

maxRecursive(Arrays.copyOfRange(v, 1, v.length)); 

이다. 따라서 tov.length - 1 인 경우 배열은 1에서 까지의 모든 요소를보고 마지막 요소 인이 표시됩니다.

의심 스럽다면 Javadocs을 읽어보십시오.

0

배열에서 가장 큰 방법을 찾는 것이 좋습니다 특정 인덱스 : 다음

public static int findMax(int[] arr, int lastPos) { 
    if (lastPos==0) 
     return arr[lastPos]; 
    else 
     return biggest(arr[lastPos], findMax(arr, lastPos-1)); 
} 

와 가장 큰이 오히려 비싸다 모든 배열 복사를 방지

findMax(arr, arr.length-1); 

입니다. 귀하의 코드는 복사 작업이 많기 때문에 대형 배열의 경우 비효율적입니다. 이 버전에서는 동일한 배열을 전달하지만 참조로 사용합니다. 배열을 고려할 때 얼마나 멀리 허용되는지 메서드에 알려줍니다.

주요 관찰 사항은 배열의 최대 요소가 마지막 요소이거나 마지막 요소를 제외한 배열의 최대 값입니다. 이것은 본질적으로 당신이 처음부터 시작하는 아이디어와 같습니다. 해지 사례를 작성하고 이해하기가 좀 더 쉬워집니다. 당신이 사용하고있는 방법 (Arrays.copyOfRange)를위한 JavaDoc에서

0

스트레이트

원 - 범위의 초기 인덱스 - 범위가에서

를 복사 할있는 배열

to - 복사 할 범위의 최종 색인 exclusive. (이 색인은 배열 외부에있을 수 있습니다.)

강조 광산.

0

당신은 방법을 변경해야합니다 maxRecursive

public int maxRecursive(int[] v){ 
    if(v.length > 1){ 
     return biggest(v[0], maxRecursive(Arrays.copyOfRange(v, 1, v.length))); 
    } 
    else{ 
     return v[0]; 
    } 
}