다음 C 프로그램의 실행 결과로 옳은 것은?#include <st… | [국회직 9급 컴퓨터일반] 18년 1회차 기출문제 상세 페이지
1[국회직 9급 컴퓨터일반] 18년 1회차
다음 C 프로그램의 실행 결과로 옳은 것은?#include <stdio.h>
int recursion(int n)
{
if (n < 5) return 1;
else if (n % 5 == 1) return n + recursion(n - 1);
else recursion(n - 1);
}
int main()
{
int n = recursion(16);
printf("%d", n);
return 0;
}1
34
2
33
3
31
4
29
5
28
해설
프로그램의 출력값은 34이다.
n을 5로 나눈 나머지가 1일 때만 n을 더하고, 그 외에는 n-1로 내려간다. 마지막 else에 return이 없어 표준상 미정의 동작이지만, 재귀 결과가 그대로 전달된다고 보고 추적한다.
r(16) = 16 + r(15), r(15)부터 r(12)까지는 r(11)로 내려간다.
r(11) = 11 + r(10), r(10)부터 r(7)까지는 r(6)으로 내려간다.
r(6) = 6 + r(5), r(5) = r(4) = 1이다.
합계: 16 + 11 + 6 + 1 = 34
- 33: 기저 사례의 반환값 1을 빠뜨린 값이다.
- 31: 합계 16 + 11 + 6 + 1보다 3 작아 추적 결과와 맞지 않는다.
- 29: 합계 16 + 11 + 6 + 1보다 5 작아 추적 결과와 맞지 않는다.
- 28: n = 6에서의 덧셈을 빠뜨린 값이다.
오류나 개정된 내용이 보이면 알려주세요