728x90
재귀함수란?
메소드 혹은 함수의 내부에서 자기 자신을 다시 호출하는 함수이다.
- 재귀함수를 통해 코드를 보다 간결하게 작성할 수 있으며 변수 사용을 최소화할 수 있다.
- 모든 재귀함수는 반복문을 통해 동일한 기능을 구현할 수 있다.
- 함수를 연속적으로 호출할 경우 메모리 내부 스택 프레임에 쌓이며 대표적으로 DFS를 간결하게 작성할 수 있다.
def recur_fun(cnt):
print('{}번째 재귀함수 호출'.format(cnt))
if cnt <= 5:
cnt += 1
recur_fun(cnt)
else:
return
if __name__ == '__main__':
cnt = 0
recur_fun(cnt)
< 출력 결과 >
더보기
1번째 재귀함수 호출
2번째 재귀함수 호출
3번째 재귀함수 호출
4번째 재귀함수 호출
5번째 재귀함수 호출
6번째 재귀함수 호출
문제 ) 주어진 data 리스트 요소들의 합으로 표현할 수 있는 숫자의 경우의 수는?
1. 반복문을 통한 완전 탐색
data = [ 2, 4, 6 ]
result = set( )
for i in range(2):
for j in range(2):
for k in range(2):
result.add( data[0] * i + data[1] * j + data[2] * k )
print(result)
< 출력 결과 >
더보기
{0, 2, 4, 6, 8, 10, 12}
2. 재귀함수를 활용한 완전탐색
def recur( index, value ) :
if index == len( data ) :
result.add( value )
else :
recur( index+1, value +data[index] )
recur( index+1, value )
if __name__ == '__main__':
data = [ 2, 4, 6 ]
result = set( )
recur( 0,0 )
print( result )
< 출력 결과 >
더보기
{0, 2, 4, 6, 8, 10, 12}
재귀함수 활용
1. 팩토리얼
def fac(n):
if n <= 1 :
return 1
else :
return n * fac(n-1)
-> 자연수의 n값이 주어질 때, 1에서 n까지의 모든 자연수의 곱을 말한다.
ex ) fac(3) -> 3 * 2 * 1 -> 6
2. 피보나치 수열
def fac2(n):
if n < 2 :
return n
else :
return fac2(n-1) + fac2(n-2)
-> 첫째 및 둘째 항이 1이며 그 뒤의 모든 항은 바로 앞 두 항의 합인 수열을 말한다.
ex ) fac2(5) -> 1 + 1 + 2 + 3 + 5 = 8
728x90
'IT > 알고리즘' 카테고리의 다른 글
[python/알고리즘] 최대 공약수 구하기 (0) | 2021.05.05 |
---|---|
[python/자료구조] 동적 계획법(Dynamic Programming) (0) | 2021.03.27 |
[python/자료구조] DFS 와 BFS (0) | 2021.02.12 |
[python/자료구조] 탐색( 완전탐색 / 이분탐색 ) (0) | 2021.02.05 |
[python/자료구조] 스택(Stack), 큐(Queue)에 대해서 (0) | 2021.02.01 |
댓글
250x250
최근에 올라온 글
TAG
- SQL
- algorithm
- cnn
- Project
- 프로그래머스
- Pandas
- slqd
- numpy
- 알고리즘
- db
- 딥러닝
- 부스트코스
- 인공지능
- sklearn
- 주니온
- 기계학습
- 자료구조
- 파이썬
- Python
- Min()
- SQLD
- Programmers
- VGGNet
- Ai
- 경사하강법
- 머신러닝
- Max()
- OpenCV
- Scikit
- MongoDB
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- Total
- Today
- Yesterday