문제
다음 C 코드의 실행 결과를 쓰시오.
C#include <stdio.h> struct Point { int x, y; }; int calculate(struct Point p, int level) { if (level == 0) { printf("%d ", p.x + p.y); return p.x + p.y; } struct Point new_p = {p.x + level, p.y - level}; int result = calculate(new_p, level - 1); printf("%d ", result + level); return result + level; } int main() { struct Point start = {2, 5}; calculate(start, 2); return 0; }
정답
7 8 10
7 8 107 8 107 8 10
해설
재귀 호출과 구조체 변화를 추적:
- calculate({2,5}, 2):
- new_p = {2+2, 5-2} = {4, 3}
- calculate({4,3}, 1) 호출
- calculate({4,3}, 1):
- new_p = {4+1, 3-1} = {5, 2}
- calculate({5,2}, 0) 호출
- calculate({5,2}, 0):
- level == 0이므로 printf("%d ", 5+2) 실행 → "7 " 출력
- return 7
- level 1로 돌아가서:
- result = 7
- printf("%d ", 7+1) 실행 → "8 " 출력
- return 8
- level 2로 돌아가서:
- result = 8
- printf("%d ", 8+2) 실행 → "10 " 출력
최종 출력: "7 8 10"