지난번에 간단하게 재귀 알고리즘에 대해서 알아보았는데 이번에는 조금 더 자세히 알아보려고 한다!
조합의 수 계산 예시를 통해 재귀 알고리즘의 효율성에 대해 알아볼 것이다.
from math import factorial as f
def combi(n, m):
return f(n)/(f(m)*f(n-m))
def combi(n,m):
return combi(n-1, m) + combi(n-1, m-1)
# 위 코드는 trivial case를 고려하지 않은 실수! 중요하다!!
def combi(n, m):
if n==m:
return 1
elif m==0:
return 1
else:
return combi(n-1, m) + combi(n-1, m-1)
효율이 떨어지는 데 왜 재귀 함수를 사용하나.
재귀 알고리즘은 항상 효율성이 떨어지는 것은 아니다. 다음은 재귀 알고리즘이 유용한 경우이다.
피보나치 함수를 재귀 알고리즘을 사용했을 때와 반복문을 활용 했을 때를 비교해 본다.
def fibo(n):
if n <= 1:
return n
return fibo(n-1) + fibo(n-2)
def fibo_iter(n):
if n <= 1:
return n
else:
i = 2
t0 = 0
t1 = 1
while i <= n:
t0, t1 = t1, t0 + t1
i += 1
return t1