파이썬을 배우다 보면 꼭 나오는 개념이 있어요.
바로 재귀 함수(Recursive Function) 라는 거예요.
전 재귀 함수 문제를 처음 풀 때, 너무 어렵더라구요.
반복문도 아닌데 왜 반복이 되는지, 함수가 자신을 호출한다는게 뭔지...
하지만 정말 차근차근, 예제 하나하나 따라가면서 재귀 함수가 어떻게 작동하는지 완전히 이해하게 됐어요.
그리고 저처럼 혼란을 겪는 분들을 위해 이 글을 씁니다 😊
📌 재귀 함수란?
“자기 자신을 다시 호출하는 함수”예요.
🔁 핵심 개념:
"큰 문제를 같은 구조의 작은 문제로 쪼갤 수 있을 때,
그리고 그 작은 문제들을 똑같은 방식으로 반복해서 처리할 수 있을 때!" 사용해요.
🧸 예제 1: 1부터 n까지 더하기 (sum_to_n)
def sum_to_n(n):
if n == 1:
return 1
return n + sum_to_n(n - 1)
이 코드를 보시고 이해가 되시나요 ?
해석을 해 보자면, n 이 1일 때는 1을 반환합니다.
하지만, 만약 n이 1이 아닐 때는 n + sum_to_n(n-1)을 하는거죠.
예를들어 sum_to_n(5)라고 가정 해 볼게요.
n의 자리에 1이 아닌 5가 들어갔으니
return n + sum_to_n(n-1)이 적용되어야겠죠?
sum_to_n(5)
→ 5 + sum_to_n(4)
→ 5 + 4 + sum_to_n(3)
→ 5 + 4 + 3 + sum_to_n(2)
→ 5 + 4 + 3 + 2 + sum_to_n(1)
→ 5 + 4 + 3 + 2 + 1 = 15
왜 이렇게 되냐면, 함수가 자기 자신을 계속 부르다가, n == 1 일 경우까지 반복을 하는거에요.
이해가 되시나요 ?
🌀 그런데 여기서 질문이 생겼어요
그럼 reverse()라는 함수를 만들어서 문자열을 뒤집는 것도 재귀로 할 수 있을까?
📘 예제 2: 문자열을 뒤집는 재귀 함수
def reverse(word):
if len(word) == 0:
return ""
return reverse(word[1:]) + word[0]
예를 들어 reverse("hello")를 호출하면 어떻게 될까요?
🔍 작동 흐름
reverse("hello")
→ reverse("ello") + "h"
→ reverse("llo") + "e" + "h"
→ reverse("lo") + "l" + "e" + "h"
→ reverse("o") + "l" + "l" + "e" + "h"
→ reverse("") + "o" + "l" + "l" + "e" + "h"
→ "" + "o" + "l" + "l" + "e" + "h" = "olleh"
즉, 이 함수는 문자열을 하나씩 잘라서, 가장 마지막 글자부터 거꾸로 쌓아가면서 결과를 만드는 구조예요!
💡 재귀 함수의 핵심 구조
1. 기저 조건 (멈추는 조건)
없으면 무한 반복돼요! 무한 반복이 되지않도록, 끝낼 수 있는 조건을 넣어주는거에요.
"word의 길이가 0이라면 ""을 반환해라"
if len(word) == 0:
return ""
2. 자기 자신 호출 (작은 문제로 나눠서 다시 부르기)
→ 함수가 자기 자신을 계속 불러요!
reverse(word[1:]) 을 통해서 reverse함수가 계속 반복되게 되어있어요.
return reverse(word[1:]) + word[0]
즉, word의 길이수만큼 반복되다가, 길이가 0이 될 때 끝나는거죠.
아! 추가적으로 재귀함수와 반복문, 언제 어떻게 쓰면 좋을지 알려드려요!
반복횟수가 명확하지 않을 때 재귀함수를 쓰면 좋답니다!! :)

💬 마무리 한마디
재귀 함수는 처음 보면 뭐지? 라는 생각이 들 수도 있지만, 차근차근 풀어보면 "아! 이런 구조구나!" 라는 생각이 들거에요!
저도 많이 헤맸던 만큼, 이 글을 읽는 여러분도 조금 더 쉽게 이해할 수 있기를 바래요!
'👩🏻💻 개발 공부' 카테고리의 다른 글
[Flask 입문 2탄] HTML 구조 이해하며 Flask 라우팅 따라잡기 (h1, a, ol 태그) (0) | 2025.04.14 |
---|---|
[Flask 입문 1탄] 파이썬으로 웹서버 만들기 – 라우팅 기초까지 쉽게 배우기! (0) | 2025.04.14 |
파이썬은 어떤 언어일까? | 인터프리터, 동적 타이핑, 활용 분야까지 쉽게 이해하기 (0) | 2025.04.06 |
[개발 블로그] Git 명령어 정리 – add, commit, push가 뭐야? (0) | 2025.03.31 |
[파이썬] 조건문과 반복문 if, elif, else / for, while 쉽게 정리하기 (0) | 2025.03.31 |