재귀 알고리즘 (Recursive Algorithm)
하나의 함수에서 자기 자신을 다시 호출해 작업을 수행하는 방법
- 재귀 알고리즘은 대부분 iterative version과 recursive version 모두 구현할 수 있다.
- Recursive version은 함수를 호출하는데 드는 시간이 드므로 iterative version이 더 효율적이다. 하지만 사람이 생각하는 방식대로 동작하는 경우가 많아 유용할때도 있다.
Ex) Recursive combination 함수
파스칼의 삼각형 : \( _{n}\mathrm{C}_{m} = _{n-1}\mathrm{C}_{m} + _{n}\mathrm{C}_{m-1} \)
def combi(n, k):
if (n == k):
return 1
elif (k == 0):
return 1
else:
return combi(n-1, k) + combi(n-1, k-1)
Ex) Recursive Fibonacci
def fibo(n):
if n <= 1:
return 1
else:
return fibo(n-1) + fibo(n-2)
fibo(4) : 9번의 함수 호출이 일어남
함수안에서 2번의 함수 호출이 일어나는데 이중 같은 값을 입력받는 함수 호출도 여러번 일어나므로 효율성이 낮다.
4강 과제 : 피보나치순열
def solution(x):
if x == 0:
return 0
if x == 1:
return 1
else:
return solution(x - 1) + solution(x - 2)
5강 과제 : 재귀적 이진탐색
def solution(L, x, l, u):
if l > u:
return -1
mid = (l + u) // 2
if x == L[mid]:
return mid
elif x < L[mid]:
return solution(L, x, l, mid-1)
else:
return solution(L, x, mid + 1, u)
'Algorithm' 카테고리의 다른 글
[프로그래머스 알고리즘] 10강: 양방향 연결 리스트 (Doubly Linked Lists) (0) | 2021.07.15 |
---|---|
[프로그래머스 알고리즘] 7강, 8강, 9강: 연결 리스트 (Linked Lists) (0) | 2021.07.14 |
[프로그래머스 알고리즘] 6강: 알고리즘 복잡도 (Complexity of Algorithm) (0) | 2021.07.13 |
[프로그래머스 알고리즘] 3강: 배열 - 정렬과 탐색 (Sorting & Searching) (0) | 2021.07.12 |
[프로그래머스 알고리즘] 1강, 2강 : Intro & Linear Array (0) | 2021.07.12 |