소소한 컴퓨터 이야기

[자료구조] 재귀함수

by Cori

재귀함수

0) 정의 

-> 메소드 혹은 함수의 내부에서 자기자신의 메소드 혹은 함수를 다시 호출하는 함수 

 

1) 구조 

def solution(trump, loc):
    if 종료조건: 
    	pass
    return solution(trump, loc + 1)

* 재귀함수 사용시에는 조건문을 활용하여 재귀함수 종료조건을 삽입해야 함 

 

2) 사용 이유

-> 코드의 간결화 및 변수 사용 최소화 

 

3) 재귀함수 깊이 

* 재귀함수의 최대 깊이 기본값은 1,000이지만, 다음과 같이 옵션을 설정해주면 최대 깊이 제한을 변경 할 수 있다. 

import sys 

sys.setrecursionlimit(2500)

4) 활용 예시

Q. data = [3, 5, 8] 성분들의 합으로 표현할 수 있는 숫자의 경우의 수는 ?

· 반복문을 활용한 완전 탐색 

data = [3, 5, 8]

result = set()

for i in range(2):
    for j in range(2):
        for k in range(2):
            result.add(data[0] * i + data[1] * i + data[2] * k)

data의 개수가 늘어나면 늘어날수록 반복문의 개수 증가 -> 엄청난 시간복잡도 

 

· 재귀함수를 이용한 완전탐색

data = [3, 5, 8] 
result = set() 

def recur(index, value):
    if index == len(data):
        result.add(value)
    else: 
        recur(index + 1, value + data[index])
        recur(index + 1, value) 

recur(0, 0)

Q. 팩토리얼을 재귀함수로 작성하라 

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

Q. 피보나치 수열을 재귀함수로 작성하라 

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

'CS > Python' 카테고리의 다른 글

[자료구조] 최단 경로  (0) 2021.11.01
[자료구조] 동적계획법  (0) 2021.10.24
[자료구조] 해시  (0) 2021.09.27
[자료구조] 깊이 우선 탐색(DFS)과 너비 우선 탐색(BFS)  (0) 2021.09.14
2차원 리스트  (0) 2021.09.09

블로그의 정보

코딩하는 오리

Cori

활동하기