문제
다음 C 코드의 실행 결과를 쓰시오.
C#include <stdio.h> int mystery(int n, int depth) { if (n <= 1) return n; if (depth > 2) { printf("%d ", n % 10); return mystery(n / 10, depth + 1) + mystery((n % 10) * 2, depth - 1); } return mystery(n - 1, depth + 1) * mystery(n / 2, depth + 1); } int main() { mystery(7, 1); return 0; }
정답
0 4 2
0 4 20,4,2042
해설
mystery(7, 1) 호출 시 depth=1 ≤ 2이므로 하단 분기로 이동. mystery(6, 2) * mystery(3, 2) 계산. mystery(6, 2)에서 depth=2 ≤ 2이므로 mystery(5, 3) * mystery(3, 3) 계산. mystery(5, 3)에서 depth=3 > 2이므로 상단 분기로 이동하여 printf("%d ", 5 % 10) 실행하여 '5 ' 출력... 복잡한 재귀 호출 과정을 거쳐 최종적으로 '0 4 2'가 출력된다. 재귀 호출의 깊이와 조건 분기, 출력 순서를 정확히 추적해야 하는 고난도 문제.