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

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

문제

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

C
#include <stdio.h> typedef struct { int val; int cnt; } Node; int calc(Node n) { if (n.cnt <= 0) return n.val; n.val += n.cnt; n.cnt--; int left = calc(n); n.val -= 2; int right = calc(n); printf("%d ", left + right); return left - right; } int main() { Node n = {5, 3}; int result = calc(n); printf("%d", result); return 0; }

정답

20 16 4 0

20 16 4 020164 02016 4 0

해설

구조체가 값으로 전달되므로 각 calc 호출은 독립적인 n을 갖습니다.

실행 과정을 단계별로 추적하면:

  1. calc({5,3}) 호출

    • val = 5+3 = 8, cnt = 2
    • left = calc({8,2})
    • val = 8-2 = 6
    • right = calc({6,2})
  2. calc({8,2}) 호출

    • val = 8+2 = 10, cnt = 1
    • left = calc({10,1})
    • val = 10-2 = 8
    • right = calc({8,1})
  3. calc({10,1}) 호출

    • val = 10+1 = 11, cnt = 0
    • left = calc({11,0}) → 11 반환 (기저조건)
    • val = 11-2 = 9
    • right = calc({9,0}) → 9 반환 (기저조건)
    • printf("%d ", 11+9) → "20 " 출력
    • return 11-9 = 2
  4. calc({8,1}) 호출

    • val = 8+1 = 9, cnt = 0
    • left = calc({9,0}) → 9 반환
    • val = 9-2 = 7
    • right = calc({7,0}) → 7 반환
    • printf("%d ", 9+7) → "16 " 출력
    • return 9-7 = 2
  5. calc({8,2})에서 printf(2+2) → "4 " 출력, return 2-2 = 0

  6. calc({6,2})도 동일하게 처리되어 0 반환

  7. calc({5,3})에서 return 0-0 = 0

  8. main에서 printf("%d", 0) → "0" 출력

최종 출력: "20 16 4 0"

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

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