재귀적 호출은 주로 하향식(top-down) 접근 방식을 사용한다. 즉, 큰 문제를 작은 하위 문제로 나누어 해결하는 방식
동적 계획법은 주로 상향식(bottom-up) 접근 방식을 사용한다. 작은 하위 문제들부터 시작하여 그 결과를 저장하고, 이를 이용하여 점진적으로 큰 문제의 해를 구해나간다.
DP 기법을 적용시킬 수 있는 조건
중복되는 부분 문제
최적 부분 구
메모이제이션(Memoization)
다이나믹 프로그래밍을 구현하는 방법 중 하나이다.
한 번 계산한 결과를 메모리 공간에 메모하는 기법이다.
메모이제이션은 한 번 구한 정보를 리스트에 저장하는 형태로 구현한다. = DP 테이블
코드 형태 (ex. 피보나치)
# DP테이블 초기화
d = [0] * 100
# 첫 번째 피보나치 수와 두 번째 피보나치 수는 1
d[1] = 1
d[2] = 1
n = 99
# 피보나치 함수 반복문으로 구현
for i in range(3, n + 1):
d[i] = d[i - 1] + d[i - 2]
print(d[n])