파이썬/알고리즘 공부
playdataAlgo재귀함수 🔄
Jimyeung
2021. 9. 5. 20:16
728x90
➰재귀함수 ➰
💢재귀함수란??
메소드 혹은 함수의 내부에서 자기자신의 메소드 혹은 함수를 다시 호출하는 함수!
- ex)
✅예시문제
data = [3, 5, 8]
성분들의 합으로 표현할 수 있는 숫자의 경우의 수는??
✅성분들의 합
중복값들이 존재하므로 2^3의값인 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] * j + data[2] * k)
print(result)
[0, 3, 5, 8, 11, 13, 16]
위에 함수에서 값이 3개이므로 for문으로 가능했지만 아래와 같은 상황이라면 어떻게 할 것인가?
data = [3, 5, 7, 10, 12, 15, 20]
우리는 여기서 성분의 갯수는 반복문의 갯수라는 것을 알 수 있다.
이럴경우 재귀함수라는 것을 사용해보자.
✅재귀함수 원리
재귀함수 사용이유-코드의 간결화 및 변수 사용 최소화하기 위해서이다. 조건문을 활용하여 재귀함수 종료조건을 삽입해 주어야 한다.
✅재귀함수를 활용한 완전 탐색
def recur(index, value)
if index == len(data)://재귀함수 종료구문
result.add(value)
else:
recur(index+1, value+data[index])//재귀함수 부문
recure(index+1, value)
data = [3, 5, 8]
result = set()
recur(0, 0)
print(result)
(0, 3, 5, 8, 11, 13, 16 )
========================
data = [3, 5, 8, 10, 12, 16, 15, 20]
result = set()
recur(0, 0)
print(result)
(0, 3, 5, 8, 10, 12, 13, 15, 17.... )
✅재귀함수 활용(팩토리얼)
✅재귀함수 활용(파보나치수열)
def fibanoacci(n):
if n == 0 or n == 1:
return 1
else:
return fibonacci(n-1) + fibonacci(n-2)