정말 좋은 질문이에요. 재귀는 많은 사람들이 처음에 어려워하지만, 한 번 감을 잡으면 아주 강력한 도구가 됩니다. 아래에 재귀를 제대로 이해하고 공부하는 방법을 단계별로 정리해드릴게요.
재귀 함수는 자기 자신을 호출하는 함수입니다.
하지만 무한히 호출되면 안 되기 때문에 종료 조건(기저 조건) 이 꼭 있어야 해요.
def countdown(n):
if n == 0:
print("Done!")
return
print(n)
countdown(n - 1)
👉 출력:
5
4
3
2
1
Done!
재귀는 함수 호출이 스택에 쌓였다가, 조건이 충족되면 하나씩 돌아오면서 실행됩니다.
예를 들어 다음 코드를 보면:
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
이런 식으로 들어갈 때와 나올 때가 있다는 걸 이해하는 게 핵심이에요.
예를 들어 팩토리얼 함수를 재귀와 반복문으로 비교해보세요.
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
👉 이렇게 반복문과 비교하면서, 왜 재귀가 동작하는지 감을 익히세요.
재귀는 보통 문제를 여러 개의 하위 문제로 나누는 구조에서 자주 써요.
대표적으로:
재귀는 "내가 문제를 쪼개서, 똑같은 일을 반복해서 하게 만드는 기술"이에요.
함수 호출이 스택처럼 쌓이고, 기저 조건에서부터 하나씩 계산되며 "돌아오는 흐름"을 그려보면 이해가 빠릅니다.
필요하시면 직접 연습할 수 있는 재귀 문제를 단계별로 추천해드릴 수도 있어요. 원하시나요?