📘 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 언어에서 재귀 호출의 흐름을 시각화하는 능력을 키우는 데 매우 중요합니다.

더 깊이 공부하고 싶다면
DevLec에서는 실무 중심의 C#, .NET, ASP.NET Core, Blazor, 데이터 액세스 강좌를 단계별로 제공합니다. 현재 수강 가능한 강좌 외에도 더 많은 과정이 준비되어 있습니다.
DevLec.com에서 자세한 커리큘럼을 확인해 보세요.
DevLec 공식 강의
C# Programming
C# 프로그래밍 입문
프로그래밍을 처음 시작하는 입문자를 위한 C# 기본기 완성 과정입니다.
ASP.NET Core 10.0
ASP.NET Core 10.0 시작하기 MVC Fundamentals Part 1 MVC Fundamentals Part 2
웹 애플리케이션의 구조와 MVC 패턴을 ASP.NET Core로 실습하며 익힐 수 있습니다.
Blazor Server
풀스택 웹개발자 과정 Part 1 풀스택 웹개발자 과정 Part 2 풀스택 웹개발자 과정 Part 3
실무에서 바로 활용 가능한 Blazor Server 기반 관리자·포털 프로젝트를 만들어 봅니다.
Data & APIs
Entity Framework Core 시작하기 ADO.NET Fundamentals Blazor Server Fundamentals Minimal APIs
데이터 액세스와 Web API를 함께 이해하면 실무 .NET 백엔드 개발에 큰 도움이 됩니다.
VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com