이것은 제가 자기 학습 자바의 일부로 생각하고있는 문제입니다. 문제는 ArrayList of Integers에서 최소값을 찾는 재귀 함수를 작성하는 것 입니다. 아래에서 내 시도를 찾을 수 있습니다. 의도 한대로 작동한다고 생각하지만이 작업을 수행하는 더 좋은 방법이 있는지 궁금합니다. 모든 의견을 부탁드립니다.
public static int findMin(ArrayList<Integer> numbers){
// Base Case
if(numbers.size()==1){
return numbers.get(0).intValue();
}
ArrayList<Integer> numbers_short = new ArrayList<Integer>(numbers);
numbers.remove(numbers.size()-1);
return Math.min(numbers_short.get(numbers_short.size()-1).intValue(), findMin(numbers));
}
귀하의 예는이 경우 재귀를 사용해서는 안되는 방식으로 좋지 않습니다. 그러나 어쨌든 시작 및 종료 매개 변수가있는 메서드를 사용하여 초기 배열의 일부만 분석하면 매번 배열을 복사하지 않아도됩니다.
그런 것 :
public static int findMin(ArrayList<Integer> numbers) {
return findMin(numbers, 0, numbers.size() - 1);
}
public static int findMin(ArrayList<Integer> numbers, int start, int end) {
if (end == start)
return numbers.get(start);
int middle = start + (end - start) / 2;
return Math.min(findMin(numbers, start, middle), findMin(numbers, middle + 1, end));
}
필요한 경우 배열이 비어있는 경우 확인을 추가하십시오.
"중간"방법을 사용하는 이유는 배열을 2로 나눌 때마다 스택 오버플로의 위험을 제한하기 때문입니다. 즉, 스택 오버플로의 위험을 제한하기 때문입니다. 요소.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다