본문 바로가기
알고리즘 & 자료구조

자기 자신을 부르는 함수? 재귀함수 쉽게 이해하기!

by logro 2025. 3. 28.
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이 되면 끝나는 구조죠!
이런 식으로 작은 문제로 쪼개서 반복 해결하는 게 바로 재귀함수의 핵심이에요.

 


🔄 재귀함수가 꼭 필요한가요?

꼭 그런 건 아니지만, 특정 문제에서는 재귀가 훨씬 더 깔끔하고 직관적이에요.
대표적인 예로는:

  • 팩토리얼 계산
  • 피보나치 수열
  • 트리 구조 탐색
  • 디렉터리 구조 탐색

등이 있어요.


⚠️ 재귀 쓸 때 주의할 점!

  1. 종료 조건(base case) 이 꼭 있어야 해요!
    없으면 무한히 자기 자신을 호출해서 무한 루프에 빠져요 😱
  2. 너무 깊게 호출되면 Stack Overflow(스택 오버플로우) 에러가 발생할 수 있어요.

📌 팩토리얼 예시

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

factorial(5) → 5 * 4 * 3 * 2 * 1 = 120


☑️ 정리하며

  • 재귀함수는 자기 자신을 호출하는 함수다!
  • 문제를 더 작게 쪼개 해결할 때 유용하다.
  • 종료 조건을 반드시 넣자!
  • 반복문으로도 가능하지만, 재귀는 코드가 더 간결하고 직관적할 수 있다.

재귀는 처음에 살짝 헷갈릴 수 있지만,
오늘 예시처럼 일상적인 상황에 비유해서 이해하면 금방 익숙해져요 😉
궁금한 점 있으면 언제든지 댓글로 남겨주세요!

728x90