재귀 호출 이해

백엔드&인프라 추종자·2025년 4월 17일

정말 좋은 질문이에요. 재귀는 많은 사람들이 처음에 어려워하지만, 한 번 감을 잡으면 아주 강력한 도구가 됩니다. 아래에 재귀를 제대로 이해하고 공부하는 방법을 단계별로 정리해드릴게요.


🔍 1단계: 기본 개념 이해

재귀 함수는 자기 자신을 호출하는 함수입니다.
하지만 무한히 호출되면 안 되기 때문에 종료 조건(기저 조건) 이 꼭 있어야 해요.

예시:

def countdown(n):
    if n == 0:
        print("Done!")
        return
    print(n)
    countdown(n - 1)

👉 출력:

5
4
3
2
1
Done!

🧠 2단계: 종료 조건과 스택의 흐름 그리기

재귀는 함수 호출이 스택에 쌓였다가, 조건이 충족되면 하나씩 돌아오면서 실행됩니다.

예를 들어 다음 코드를 보면:

def hello(n):
    if n == 0:
        return
    print("Going in:", n)
    hello(n - 1)
    print("Coming out:", n)

👉 출력:

Going in: 3
Going in: 2
Going in: 1
Coming out: 1
Coming out: 2
Coming out: 3

이런 식으로 들어갈 때와 나올 때가 있다는 걸 이해하는 게 핵심이에요.


🪜 3단계: 재귀 대신 반복문으로 구현해보기

예를 들어 팩토리얼 함수를 재귀와 반복문으로 비교해보세요.

재귀:

def factorial(n):
    if n == 1:
        return 1
    return n * factorial(n - 1)

반복문:

def factorial_iter(n):
    result = 1
    for i in range(2, n + 1):
        result *= i
    return result

👉 이렇게 반복문과 비교하면서, 왜 재귀가 동작하는지 감을 익히세요.


🌲 4단계: 트리 구조 문제 풀기

재귀는 보통 문제를 여러 개의 하위 문제로 나누는 구조에서 자주 써요.
대표적으로:

  • 피보나치
  • 하노이의 탑
  • 이진 트리 순회 (전위/중위/후위)
  • 조합, 순열

✍️ 추천 학습 루틴

  1. 간단한 재귀 문제를 종이에 호출 흐름 그려가며 풀기
  2. 각 재귀 호출의 인자가 어떻게 바뀌는지 추적해보기
  3. 반복문으로 바꿔보며 비교
  4. 마지막에는 재귀 깊이를 줄이는 방법(메모이제이션, DP) 도 공부하기

🔚 마무리 조언

재귀는 "내가 문제를 쪼개서, 똑같은 일을 반복해서 하게 만드는 기술"이에요.
함수 호출이 스택처럼 쌓이고, 기저 조건에서부터 하나씩 계산되며 "돌아오는 흐름"을 그려보면 이해가 빠릅니다.


필요하시면 직접 연습할 수 있는 재귀 문제를 단계별로 추천해드릴 수도 있어요. 원하시나요?

profile
AI 답변 글을 주로 올립니다.

0개의 댓글