C함수와 배열

재귀 함수 기본

함수가 자기 자신을 다시 호출하는 재귀 패턴과 base case의 역할을 정리합니다.

마지막 수정 2026년 3월 19일

기본 패턴

c
int factorial(int n) {
    if (n <= 1) {
        return 1;
    }
    return n * factorial(n - 1);
}

설명

  • 재귀는 문제를 더 작은 같은 종류의 문제로 나누어 푸는 함수 설계 방식입니다.
  • 가장 중요한 요소는 더 이상 자기 자신을 호출하지 않고 끝나는 base case입니다.
  • 재귀는 수학적 정의와 구조적으로 닮아 있어 트리, 분할 정복, 백트래킹 설명에 자주 등장합니다.
  • 반복문으로 바꿀 수 있는 문제도 많으므로, 가독성과 스택 사용량을 함께 비교해야 합니다.

짧은 예제

c
#include <stdio.h>

int factorial(int n) {
    if (n <= 1) {
        return 1;
    }
    return n * factorial(n - 1);
}

int main(void) {
    printf("%d\n", factorial(5));
    return 0;
}

빠른 정리

항목설명
base case재귀를 멈추는 종료 조건
recursive case더 작은 문제로 자기 자신을 다시 호출
호출 스택각 호출 상태가 스택에 쌓임
장점구조가 분명한 문제를 짧게 표현 가능
단점깊은 호출은 스택 사용량이 커짐

주의할 점

종료 조건이 잘못되면 무한 재귀로 스택 오버플로우가 발생할 수 있습니다. 재귀는 항상 "어떻게 줄어드는가"와 "언제 끝나는가"를 먼저 확인해야 합니다.