재귀(Recursion)는 함수가 자기 자신을 호출해 문제를 해결하는 프로그래밍 기법이다. 분할 정복, 트리 순회, 백트래킹의 핵심 구현 방식이다.
재귀의 두 가지 요소
1. 기저 사례 (Base Case): 재귀를 멈추는 조건
2. 재귀 사례 (Recursive Case): 자기 자신을 호출하는 부분
팩토리얼
python
def factorial(n):
if n <= 1: return 1 # 기저 사례
return n * factorial(n-1) # 재귀 사례
factorial(5) # 5 × 4 × 3 × 2 × 1 = 120
factorial(3)
→ factorial(2)
→ factorial(1)
→ return 1
→ return 2 * 1 = 2
→ return 3 * 2 = 6
꼬리 재귀 (Tail Recursion)
python
# 일반 재귀: 스택 프레임 축적
def factorial(n, acc=1):
if n <= 1: return acc
return factorial(n-1, n*acc) # 꼬리 재귀
재귀 vs 반복
| 항목 | 재귀 | 반복 |
|---|
| 코드 가독성 | 높음 | 낮을 수 있음 |
| 스택 오버플로 위험 | 있음 | 없음 |
| 성능 | 오버헤드 있음 | 빠름 |
관련 개념
- •스택 — 재귀 호출은 콜 스택에 쌓임
- •분할 정복 — 재귀 기반 패러다임
- •동적 프로그래밍 — 재귀 + 메모이제이션
- •백트래킹 — 재귀 기반 완전 탐색
참고문헌
- •Cormen et al. Introduction to Algorithms