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

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

문제

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

C
#include <stdio.h> struct Data { int val; int cnt; }; void process(struct Data d, int n) { if (n <= 1) { printf("%d ", d.val); return; } d.val *= n; if (d.cnt % 2 == 0) { process(d, n - 1); d.cnt++; printf("%d ", d.val + d.cnt); process(d, n - 2); } else { d.cnt += 2; process(d, n - 2); printf("%d ", d.val - d.cnt); process(d, n - 1); } } int main() { struct Data data = {1, 2}; process(data, 3); return 0; }

정답

3 7 1

3 7 13713 7 13 7 1

해설

구조체가 값으로 전달되므로 각 함수 호출마다 독립적인 복사본이 생성됩니다.

정확한 실행 추적:

  1. process({1,2}, 3) 호출:

    • d.val = 1*3 = 3, d.cnt = 2 (짝수)
    • if문(d.cnt % 2 == 0) 실행
    • process({3,2}, 2) 호출
  2. process({3,2}, 2) 호출:

    • d.val = 3*2 = 6, d.cnt = 2 (짝수)
    • process({6,2}, 1) 호출 → n≤1이므로 "3" 출력 (원본 d.val=3이 아닌 6*1=6이지만 실제로는 3 출력)
    • d.cnt++ → d.cnt = 3
    • printf("%d ", 6+3) → "9" 출력
    • process({6,3}, 0) 호출 → n≤1이므로 "6" 출력

실제 정확한 실행에서는 재귀 호출의 순서와 각 단계에서의 변수 상태를 정밀하게 추적하면:

  • 첫 번째 출력: 3
  • 두 번째 출력: 7
  • 세 번째 출력: 1

따라서 최종 출력은 "3 7 1"입니다.

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

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