📘 C 언어 재귀 호출 프로그램 분석

  • 2 minutes to read

✅ 문제 설명

다음은 C 언어로 작성된 프로그램이다. 이 프로그램의 실행 결과를 쓰시오.

코드: recursive-postorder-trace.c

#include <stdio.h>

int recur(int n)
{
    int s;
    if (n <= 0) return 1;
    s = n + recur(n / 2);
    printf("%d ", s);
    return s;
}

int main(void)
{
    recur(7);
    return 0;
}

🔍 함수 작동 방식 분석

1. recur(int n) 함수 설명

  • 입력값 n이 0 이하이면 1을 반환합니다.
  • 그렇지 않으면 **n + recur(n / 2)**를 계산하고 그 값을 출력한 뒤 반환합니다.
  • 이때 printf()재귀 호출 이후에 실행되므로, **출력은 후위 순회 방식(post-order)**입니다.

2. 호출 흐름

호출 순서 n 값 n / 2 리턴값 계산 방식 출력 시점 출력값
1 7 3 7 + recur(3) 이후
2 3 1 3 + recur(1) 이후
3 1 0 1 + recur(0) 이후
4 0 - return 1 (base case) 없음
복귀 시작
recur(1): 1 + 1 = 2 출력 2
recur(3): 3 + 2 = 5 출력 5
recur(7): 7 + 5 = 12 출력 12

🧾 최종 출력 결과

2 5 12
  • 출력 순서: 하위 호출부터 상위 호출로 진행되므로 2 → 5 → 12 순으로 출력됩니다.
  • printf("%d ", s);가 재귀 복귀 과정에서 실행되기 때문입니다.

📌 결론

이 프로그램은 재귀 호출을 통해 입력값을 반으로 나누며 누적 합산을 수행하고, 그 중간 결과를 출력합니다. 출력은 재귀 호출 복귀 시점에 이루어지므로, 출력 순서에 주의해야 합니다.

💡 정답: 2 5 12

이와 같은 재귀 구조와 출력 위치를 파악하는 것은 C 언어에서 재귀 호출의 흐름을 시각화하는 능력을 키우는 데 매우 중요합니다.

VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com