[자료구조 멘토링] 함수의 재귀 (feat. Python)

2025. 1. 20. 00:29· Python/알고리즘 - 이론
목차
  1. 1. 함수의 재귀적 호출의 이해
  2. 1-1. 재귀란?
  3. 1-2. 재귀 함수의 기본 구조
  4. 1-3. 예제) 펙토리얼 함수
  5. 2. 재귀의 활용
  6. 2-1. 피보나치 수열
  7. 3. 주의점
  8. 4. 문제 풀어보기
반응형

1. 함수의 재귀적 호출의 이해

1-1. 재귀란?

재귀는 어떤 함수가 자기 자신을 다시 호출하는 방식을 의미한다.

쉽게 말해서, 어떤 문제를 해결 할 때, 작은 문제로 나누고, 그 작은 문제를 해결하는 방식이 동일하다면 재귀를 사용할 수 있다.

 

1-2. 재귀 함수의 기본 구조

재귀 함수를 작성할 때, 두가지 중요한 요소가 있다.

기본 조건

무한히 자기 자신을 호출하면 안되니깐, 탈출 조건(종료 조건)이 필요하다.

이 조건이 없으면 무한 루프에 빠져서 프로그램이 멈추지 않게 된다.

 

재귀 호출

자기 자신을 호출하는 부분이 필요하다.

이때, 문제의 크기를 점점 줄여서 기본 조건에 도달할 수 있도록 만들어야 한다.

 

1-3. 예제) 펙토리얼 함수

팩토리얼은 자연수 n에 대해서 아래와 같이 정의할 수 있다.

n != n x (n-1)!

 

단, 0! = 1로 정의된다.

 

코드로 작성해보면 아래와 같이 작성할 수 있다.

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

실행 흐름을 살펴보면 아래와 같이 나타낼 수 있다.

factorial(5) = 5 * factorial(4)
factorial(4) = 4 * factorial(3)
factorial(3) = 3 * factorial(2)
factorial(2) = 2 * factorial(1)
factorial(1) = 1 * factorial(0)
factorial(0) = 1

 

2. 재귀의 활용

재귀는 다양한 문제 해결에 활용될 수 있어. 대표적으로 피보나치 수열을 다룰 수 있다.

2-1. 피보나치 수열

피보나치 수열의 경우 아래와 같이 정의된다.

F(n) = F(n-1) + F(n-2)

단, 기본조건은 아래와 같이 주어진다.

F(0) = 0, F(1) = 1

 

코드로 작성해보면 아래와 같이 작성할 수 있다.

def fibonacci(n):
    if n == 0:  
        return 0
    elif n == 1:
        return 1
    return fibonacci(n-1) + fibonacci(n-2)

print(fibonacci(6))  # 8

하지만, 위 방식은 같은 값을 여러번 계산하기 때문에 비효율적이다.

이를 위해서 아래와 같이 메모리제이션(캐싱)을 활용할 수 있다.

memo = {}

def fibonacci_memo(n):
    if n in memo:
        return memo[n]
    if n == 0:
        return 0
    elif n == 1:
        return 1
    memo[n] = fibonacci_memo(n-1) + fibonacci_memo(n-2) 
    return memo[n]


print(fibonacci_memo(5))

 

3. 주의점

a. 재귀함수를 잘 활용하면 복잡한 알고리즘을 간결히 작성할 수 있다.

  • 단, 오히려 다른 사람이 이해하기 어려운 형태의 코드가 될 수 있다.

b. 모든 재귀 함수는 반복문을 이용하여 동일한 기능을 구현할 수 있다. 반복문이 더 유리한 경우도 있다.

c. 컴퓨터가 함수를 연속적으로 호출하면 컴퓨터 메모리 내부의 스택 프레임에 쌓인다.

  • 스택 라이브러리 대신 재귀함수를 이용하는 경우가 있다.

 

4. 문제 풀어보기

https://www.acmicpc.net/problemset?sort=ac_desc&algo=62

 

 

 

 

 

 

반응형
저작자표시 (새창열림)

'Python > 알고리즘 - 이론' 카테고리의 다른 글

[자료구조 멘토링] 스택, 큐, 덱 (feat.Python)  (0) 2025.02.02
[자료구조 멘토링] 시간 복잡도  (0) 2025.01.20
BFS 너비 우선 탐색  (2) 2024.10.28
[알고리즘 발표] PPT 자료  (0) 2024.04.15
이진 탐색 알고리즘  (0) 2023.11.12
  1. 1. 함수의 재귀적 호출의 이해
  2. 1-1. 재귀란?
  3. 1-2. 재귀 함수의 기본 구조
  4. 1-3. 예제) 펙토리얼 함수
  5. 2. 재귀의 활용
  6. 2-1. 피보나치 수열
  7. 3. 주의점
  8. 4. 문제 풀어보기
'Python/알고리즘 - 이론' 카테고리의 다른 글
  • [자료구조 멘토링] 스택, 큐, 덱 (feat.Python)
  • [자료구조 멘토링] 시간 복잡도
  • BFS 너비 우선 탐색
  • [알고리즘 발표] PPT 자료
Jong_seoung
Jong_seoung
기록하자, 머리는 생각하는 곳이지 저장장치가 아니다.
반응형
Jong_seoung
Today_developStory
Jong_seoung
전체
오늘
어제

블로그 메뉴

  • Home
  • Git Hub
  • 분류 전체보기 (351)
    • Theory (16)
    • Java (3)
      • 알고리즘 (2)
      • 문법 (0)
    • Spring (7)
      • 스프링 입문 (6)
      • PickTalk (0)
      • 에러처리 (1)
    • Python (80)
      • 알고리즘 - 이론 (17)
      • 알고리즘 - 내장함수, 라이브러리 등등 (3)
      • 알고리즘 - 백준 (53)
      • 나도코딩 정리 (2)
      • 기타 (5)
    • Django (159)
      • DRF (105)
      • 인프라 (46)
      • DataBases (2)
      • API Docs (6)
    • FrontEnd (22)
      • htmx (2)
      • React (8)
      • 자바스크립트 (12)
    • GIT (16)
    • 기타 (8)
      • 정리 (2)
      • Flutter (1)
      • 마이크로프로세서 - ATmega128 (2)
      • 개발환경 세팅 (3)
    • 자격증 (37)
      • 정보처리기사 (19)
      • SQLD자격증 (18)

인기 글

최근 글

태그

  • alarm
  • BFS
  • CSRF
  • Django
  • django channels
  • django sse
  • django tutorial
  • django 배포
  • django 스웨거 적용
  • Django 이미지 저장

최근 댓글

hELLO · Designed By 정상우.v4.3.0
Jong_seoung
[자료구조 멘토링] 함수의 재귀 (feat. Python)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.