📘 C 언어 재귀 호출 프로그램 분석
✅ 문제 설명
다음은 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 언어에서 재귀 호출의 흐름을 시각화하는 능력을 키우는 데 매우 중요합니다.
추천 자료: ASP.NET Core 인증 및 권한 부여
추천 자료: .NET Blazor에 대해 알아보시겠어요? .NET Blazor 알아보기를 확인해보세요!