[자료구조] 재귀함수
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