정보처리기사 실기C언어C - 재귀함수와 구조체난이도 5SHORT_ANSWER

정보처리기사 실기 C - 재귀함수와 구조체 기출문제 #328

문제

다음 C 코드의 실행 결과를 쓰시오.

C
#include <stdio.h> typedef struct { int val; char op; } Data; int calc(Data d, int n) { if (n <= 1) { printf("%d ", d.val); return d.val; } if (d.op == '+') { d.val += n; d.op = '*'; int left = calc(d, n-2); printf("%c", d.op); d.val -= 1; int right = calc((Data){d.val * 2, '-'}, n-3); return left + right; } else { d.val = d.val * 2 - n; printf("%d ", d.val); return calc((Data){d.val + 3, '+'}, n-1); } } int main() { Data start = {3, '+'}; calc(start, 5); return 0; }

정답

8 *2 *-2

8 *2 *-2 8*2*-28 * 2 * -2

해설

[구조체와 재귀 함수 분석]

1단계: calc({3,'+'}, 5)

  • d.op == '+' 조건 만족
  • d.val = 3 + 5 = 8, d.op = '*'
  • left = calc({8,'*'}, 3) 호출

2단계: calc({8,'*'}, 3)

  • d.op != '+' (else 분기)
  • d.val = 8 * 2 - 3 = 13
  • printf("%d ", 13) → 출력: "13 "
  • calc({16,'+'}, 2) 호출 (13+3=16)

3단계: calc({16,'+'}, 2)

  • d.op == '+' 조건 만족
  • d.val = 16 + 2 = 18, d.op = '*'
  • left = calc({18,'*'}, 0) 호출

4단계: calc({18,'*'}, 0)

  • n <= 1 종료 조건
  • printf("%d ", 18) → 출력: "18 "
  • return 18

3단계 복귀

  • printf("%c", '') → 출력: ""
  • d.val = 18 - 1 = 17
  • right = calc({34,'-'}, -1) 호출

5단계: calc({34,'-'}, -1)

  • n <= 1 종료 조건
  • printf("%d ", 34) → 출력: "34 "
  • return 34

2단계 복귀

  • calc({16,'+'}, 2)의 반환값과 연산 수행

1단계 복귀

  • printf("%c", '') → 출력: ""
  • 최종 right 계산 후 음수 값 출력

**최종 출력: "8 2 -2 "

이런 문제 20~50개를 한 번에 풀어보세요

매번 새로 추가되는 모의고사 + 오답 자동 복습 + 회차별 실력 추적. 회원가입 후 무료 이용.