문제 10정답을 고른 뒤 해설을 펼쳐보세요.
다음 C 프로그램의 출력 결과는?
#include <stdio.h>
void func(int *p, int *q) {
if (p > q) return;
printf("%d ", *p + *q);
func(p + 1, q - 1);
}
int main(void) {
int a[] = { 3, 1, 4, 1, 5 };
func(a, a + 4);
return 0;
}
- ①6 2 8정답
- ②8 2 6정답
- ③8 2 8정답
- ④8 8 2정답
정답·해설 펼치기정답·해설 접기
정답: 공식 최종정답 기준 · 검수 방식
정답 근거
정답은 ③입니다. func(a, a + 4)에서 p는 a[0], q는 a[4]를 가리킵니다. 첫 호출은 3 + 5 = 8을 출력하고 func(a + 1, a + 3)을 부릅니다. 두 번째 호출은 a[1] + a[3] = 1 + 1 = 2를 출력하고 func(a + 2, a + 2)를 부릅니다. 세 번째 호출은 p와 q가 같은 위치이므로 p > q가 아니어서 a[2] + a[2] = 4 + 4 = 8을 출력합니다. 그다음 p = a + 3, q = a + 1이 되어 p > q이므로 종료합니다. 출력은 8 2 8입니다.
보기별 검토
① 첫 값을 3 + 3 등으로 잘못 계산한 결과입니다.
② 마지막 호출(가운데 원소 4 + 4)을 6으로 잘못 계산한 결과입니다.
③ 8 2 8이므로 옳습니다.
④ 호출 순서를 잘못 추적한 결과입니다.
풀이 요령 · 관련 개념
풀이 요령: 양 끝에서 안쪽으로 좁혀 오는 재귀는 「p와 q가 만나는 가운데 원소도 한 번 처리되는지」를 종료 조건(p > q)으로 반드시 확인합니다.