문제
다음 C 코드의 실행 결과를 쓰시오.
C#include <stdio.h> struct Node { int data; struct Node* next; }; void print_reverse(struct Node* head, int depth) { if (head == NULL || depth <= 0) return; print_reverse(head->next, depth - 1); printf("%d ", head->data * depth); } int main() { struct Node n1 = {2, NULL}; struct Node n2 = {3, &n1}; struct Node n3 = {1, &n2}; print_reverse(&n3, 3); return 0; }
정답
2 6 3
2 6 32 6 3
해설
재귀 호출 과정을 추적하면:
- print_reverse(&n3, 3): n3.data=1, depth=3
- print_reverse(&n2, 2) 호출
- print_reverse(&n2, 2): n2.data=3, depth=2
- print_reverse(&n1, 1) 호출
- print_reverse(&n1, 1): n1.data=2, depth=1
- print_reverse(NULL, 0) 호출 → 즉시 리턴
- printf("%d ", 2*1) → "2 " 출력
- n2로 돌아가서 printf("%d ", 3*2) → "6 " 출력
- n3로 돌아가서 printf("%d ", 1*3) → "3 " 출력 최종 출력: "2 6 3"