← 질문 목록
#161깊이 0
재귀 호출 대신 반복문을 써야 하는 순간은 언제인가?
호출 깊이가 깊어져 스택 오버플로우가 발생할 위험이 있거나 극단의 성능과 메모리 효율이 필요할 때다.
| 방식 | 스택 메모리 특성 |
|---|---|
| 재귀 호출 | 매 호출마다 스택 프레임 생성 (메모리 오버헤드) |
| 반복문 | 동일 스택 프레임 안에서 변수 업데이트 (메모리 고정) |
위 구조처럼 재귀는 함수를 부를 때마다 매개변수, 지역 변수, 복귀 주소를 스택 메모리에 쌓는다. 가독성은 높지만 오버헤드가 발생한다.
호출 횟수가 입력 크기에 비례해 커지면 스택 영역 한도를 넘겨 프로그램이 종료될 수 있다. 꼬리 재귀 최적화가 없고 호출 깊이가 스택 한도를 넘길 수 있으면 반복문으로 바꾼다. 깊이가 얕으면 그대로 두는 편이 읽기 좋다.