본문 바로가기
👩🏻‍💻 개발 공부

📝 재귀함수가 뭐야? – 정말 초보를 위해 이해하기 쉽게 설명

by minheestory 2025. 4. 7.

 

 

파이썬을 배우다 보면 꼭 나오는 개념이 있어요.
바로 재귀 함수(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이 될 때 끝나는거죠.

 

 

아! 추가적으로 재귀함수와 반복문, 언제 어떻게 쓰면 좋을지 알려드려요!

반복횟수가 명확하지 않을 때 재귀함수를 쓰면 좋답니다!! :)

 

 

💬 마무리 한마디

재귀 함수는 처음 보면 뭐지? 라는 생각이 들 수도 있지만, 차근차근 풀어보면 "아! 이런 구조구나!" 라는 생각이 들거에요!

 

저도 많이 헤맸던 만큼, 이 글을 읽는 여러분도 조금 더 쉽게 이해할 수 있기를 바래요!