문제
다음 C 코드의 실행 결과를 쓰시오.
C#include <stdio.h> int trace(int level) { if (level <= 1) { printf("%d", level); return level; } int left = trace(level - 2); printf("%d", level); int right = trace(level - 1); return left + right + level; } int main() { trace(4); return 0; }
정답
021413021
021413021
해설
trace(4)에서 먼저 trace(2)를 호출한다. trace(2)는 trace(0)을 호출해 0을 출력하고, 이어 2를 출력한 뒤 trace(1)을 호출해 1을 출력한다. 여기까지 출력은 021이다. 이후 trace(4)가 4를 출력하고 trace(3)을 호출한다. trace(3)은 trace(1)로 1을 출력하고, 3을 출력한 뒤 trace(2)를 다시 호출하여 0, 2, 1을 차례로 출력한다. 따라서 최종 출력은 021413021이다.