문제
다음 Java 코드의 출력 결과로 가장 적절한 것은?
Javapublic class Main { public static void main(String[] args) { int[] data = {3, 5, 8, 12, 17}; System.out.println(func(data, 0, data.length - 1)); } static int func(int[] a, int st, int end) { if (st >= end) return 0; int mid = (st + end) / 2; return a[mid] + Math.max(func(a, st, mid), func(a, mid + 1, end)); } }
① 20 ② 17 ③ 25 ④ 8
정답
1번
해설
정답: 1. 최초 호출 func(a,0,4)에서 mid는 2이므로 a[2]=8을 더한다. 왼쪽 func(a,0,2)는 8, 오른쪽 func(a,3,4)는 12를 반환하므로 8 + max(8, 12) = 20이다.
오답 풀이
- 1번: 재귀 호출과 Math.max 결과를 올바르게 계산한 값이다.
- 2번: 배열의 마지막 값과 혼동한 값이다.
- 3번: 여러 값을 단순 합산한 값이다.
- 4번: 최초 mid 값만 반환한 경우이다.
보충 개념 재귀 함수는 종료 조건과 분할 범위를 정확히 추적해야 한다. 이 코드는 중간값을 더하고 양쪽 재귀 결과 중 큰 값을 선택한다.