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

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

문제

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

C
#include <stdio.h> struct Point { int x, y; }; int calc(struct Point p, int level) { if (level <= 0) { printf("%d ", p.x + p.y); return p.x * p.y; } p.x += level; int left = calc(p, level - 2); p.y -= level; printf("%d ", p.x - p.y); int right = calc(p, level - 1); return left + right; } int main() { struct Point pt = {2, 3}; int result = calc(pt, 3); printf("=%d", result); return 0; }

정답

8 5 3 6 9 =14

8 5 3 6 9 =148 5 3 6 9=1485369=14

해설

단계별 실행 추적:

  1. main에서 calc({2,3}, 3) 호출

  2. calc({2,3}, 3) 실행:

    • level > 0이므로 p.x = 2 + 3 = 5
    • left = calc({5,3}, 1) 호출
  3. calc({5,3}, 1) 실행:

    • level > 0이므로 p.x = 5 + 1 = 6
    • left = calc({6,3}, -1) 호출
  4. calc({6,3}, -1) 실행:

    • level ≤ 0이므로 printf("%d ", 6+3) → 출력: "8 "
    • return 6 × 3 = 18
  5. calc({5,3}, 1)로 복귀:

    • p.y = 3 - 1 = 2
    • printf("%d ", 6-2) → 출력: "5 "
    • right = calc({6,2}, 0) 호출
  6. calc({6,2}, 0) 실행:

    • level ≤ 0이므로 printf("%d ", 6+2) → 출력: "3 "
    • return 6 × 2 = 12
  7. calc({5,3}, 1)에서 return 18 + 12 = 30

  8. calc({2,3}, 3)로 복귀:

    • p.y = 3 - 3 = 0
    • printf("%d ", 5-0) → 출력: "6 "
    • right = calc({5,0}, 2) 호출
  9. calc({5,0}, 2) 실행:

    • level > 0이므로 p.x = 5 + 2 = 7
    • left = calc({7,0}, 0) 호출
  10. calc({7,0}, 0) 실행:

    • level ≤ 0이므로 printf("%d ", 7+0) → 출력: "7 " (아직 =14 아님)
    • return 7 × 0 = 0
  11. calc({5,0}, 2)로 복귀:

    • p.y = 0 - 2 = -2
    • printf("%d ", 7-(-2)) → 출력: "9 "
    • right = calc({7,-2}, 1) 호출
  12. calc({7,-2}, 1) 실행 후 return -16

  13. calc({5,0}, 2)에서 return 0 + (-16) = -16

  14. calc({2,3}, 3)에서 return 30 + (-16) = 14

  15. main에서 printf("=%d", 14) → 출력: "=14"

최종 출력: 8 5 3 6 9 =14

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

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