728x90
안녕하세요 logro 입니다 :)
오늘의 개념은 초보자 분들이 처음에는 좀 헷갈리지만, 한 번 이해하면 감탄하게 되는 재귀함수(Recursion) 에 대해 이야기해볼게요!
🧠 재귀함수가 뭐예요?
재귀함수(Recursion) 는 함수가 자기 자신을 호출하는 방식이에요.
쉽게 말해, 어떤 문제를 더 작은 문제로 나눠서 해결하려고 함수가 스스로를 반복해서 부르는 것이죠.
마치 거울을 거울에 비춘 것처럼, 함수 안에서 또 자기 자신이 호출되는 구조예요!
🍰 예시로 쉽게 이해해보기
📌 예: 케이크 자르기
생일 케이크를 1조각씩 자르는 걸 생각해봐요.
"케이크 조각이 1개 이상이면 한 조각 자르고, 다시 자르자!"
라는 규칙으로 계속 자르면, 마지막 조각까지 잘라낼 수 있죠.
이걸 코드로 표현하면 이렇게 됩니다 👇
def cut_cake(pieces):
if pieces == 0:
print("케이크를 다 잘랐어요!")
return
print(f"{pieces}조각 남았어요. 하나 자를게요 ✂️")
cut_cake(pieces - 1)
cut_cake(3)
결과:
3조각 남았어요. 하나 자를게요 ✂️
2조각 남았어요. 하나 자를게요 ✂️
1조각 남았어요. 하나 자를게요 ✂️
케이크를 다 잘랐어요!
자기 자신을 호출할 때마다 pieces를 1씩 줄이고, 0이 되면 끝나는 구조죠!
이런 식으로 작은 문제로 쪼개서 반복 해결하는 게 바로 재귀함수의 핵심이에요.
🔄 재귀함수가 꼭 필요한가요?
꼭 그런 건 아니지만, 특정 문제에서는 재귀가 훨씬 더 깔끔하고 직관적이에요.
대표적인 예로는:
- 팩토리얼 계산
- 피보나치 수열
- 트리 구조 탐색
- 디렉터리 구조 탐색
등이 있어요.
⚠️ 재귀 쓸 때 주의할 점!
- 종료 조건(base case) 이 꼭 있어야 해요!
없으면 무한히 자기 자신을 호출해서 무한 루프에 빠져요 😱 - 너무 깊게 호출되면 Stack Overflow(스택 오버플로우) 에러가 발생할 수 있어요.
📌 팩토리얼 예시
def factorial(n):
if n == 1:
return 1
return n * factorial(n - 1)
factorial(5) → 5 * 4 * 3 * 2 * 1 = 120
☑️ 정리하며
- 재귀함수는 자기 자신을 호출하는 함수다!
- 문제를 더 작게 쪼개 해결할 때 유용하다.
- 종료 조건을 반드시 넣자!
- 반복문으로도 가능하지만, 재귀는 코드가 더 간결하고 직관적할 수 있다.
재귀는 처음에 살짝 헷갈릴 수 있지만,
오늘 예시처럼 일상적인 상황에 비유해서 이해하면 금방 익숙해져요 😉
궁금한 점 있으면 언제든지 댓글로 남겨주세요!
728x90
'알고리즘 & 자료구조' 카테고리의 다른 글
'퀵'하게 정렬한다고? 빠르고 똑똑한 정렬 알고리즘, 퀵 정렬(Quick Sort)!🏎️ (0) | 2025.03.28 |
---|---|
데이터 지문을 만드는 마법? 해시 알고리즘의 세계! (2) | 2025.03.28 |
어디 숨었니? 반으로 쪼개며 찾자! - 이진 탐색(Binary Search) 쉽게 배우기 (0) | 2025.03.28 |
알고리즘의 속도를 말해주는 마법의 도구, 시간 복잡도란? (0) | 2025.03.28 |
정렬 알고리즘 3형제 비교하기 🧼🧢🖊️: 버블 vs 선택 vs 삽입 (0) | 2025.03.28 |