문제
다음 C 코드의 실행 결과를 쓰시오.
C#include <stdio.h> int calculate(int value) { if (value <= 1) { printf("%d ", value); return value; } int left = calculate(value / 2); printf("%d ", value); int right = calculate(value - 2); return left + right; } int main() { calculate(5); return 0; }
정답
1 2 0 5 1 3 1
1 2 0 5 1 3 11205131
해설
calculate(5) 호출 과정을 단계별로 추적:
- calculate(5) 호출
- left = calculate(5/2=2) 호출
- calculate(2/2=1) 호출 → 출력 '1', 반환 1
- 출력 '2'
- right = calculate(2-2=0) 호출 → 출력 '0', 반환 0
- left=1, right=0, 반환 1
- 출력 '5'
- right = calculate(5-2=3) 호출
- left = calculate(3/2=1) 호출 → 출력 '1', 반환 1
- 출력 '3'
- right = calculate(3-2=1) 호출 → 출력 '1', 반환 1
- left=1, right=1, 반환 2
- left=1, right=2, 반환 3
- left = calculate(5/2=2) 호출
출력 순서: 1 2 0 5 1 3 1