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

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

문제

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

C
#include <stdio.h> struct Node { int data; int level; }; int calc(struct Node n, int depth) { if (n.data <= 1) { printf("%d ", n.level + depth); return n.level; } struct Node left = {n.data / 2, n.level + 1}; struct Node right = {n.data - 2, n.level + 1}; int result = calc(left, depth + 1) + calc(right, depth + 1); printf("%d ", result); return result; } int main() { struct Node start = {5, 0}; calc(start, 0); return 0; }

정답

4 4 4 4 4 4 8

4 4 4 4 4 4 84,4,4,4,4,4,84 4 4 4 4 4 8

해설

재귀 호출 순서를 정확히 추적하면:

  1. calc({5,0}, 0) 시작

    • left = {2, 1}, right = {3, 1}
    • calc({2,1}, 1) 먼저 호출
  2. calc({2,1}, 1) 처리

    • left = {1, 2}, right = {0, 2}
    • calc({1,2}, 2) 호출: data≤1이므로 level+depth = 2+2 = 4 출력, return 2
    • calc({0,2}, 2) 호출: data≤1이므로 level+depth = 2+2 = 4 출력, return 2
    • result = 2+2 = 4, 4 출력 후 return 4
  3. calc({3,1}, 1) 처리

    • left = {1, 2}, right = {1, 2}
    • calc({1,2}, 2) 호출: data≤1이므로 level+depth = 2+2 = 4 출력, return 2
    • calc({1,2}, 2) 호출: data≤1이므로 level+depth = 2+2 = 4 출력, return 2
    • result = 2+2 = 4, 4 출력 후 return 4
  4. calc({5,0}, 0) 완료

    • result = 4+4 = 8, 8 출력 후 return 8

따라서 printf 출력 순서는: 4 4 4 4 4 4 8

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

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