파이썬/알고리즘 공부

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)