피보나치 수열(Fibonacci numbers) - 1의 을 구하는 방법은 동일한 재귀함수를 여러번 호출하기 때문에 이 높아질수록 효율이 극도로 나빠진다.
Fibo(N)의 반환 값을 미리 저장해두고, 나중에 동일한 값으로 호출했을 때 저장한 값을 돌려주는 메모이제이션 방법을 사용하면 된다.
코드를 설명하는게 더 나은 것 같아서 바로 코드를 써본다.
#include <iostream>
#include <vector>
using namespace std;
vector<long long> memo;
long long Fibo(int N)
{
//베이스 케이스
if (N == 0)
return 0;
else if (N == 1)
return 1;
if (memo[N] != -1) return memo[N];
return memo[N] = Fibo(N - 1) + Fibo(N - 2);
}
int main()
{
memo.assign(50, -1);
cout << "Fibo(49) : " << Fibo(49)<< endl;
}
return memo[N] = Fibo(N - 1) + Fibo(N - 2);
를 한 번이라도 거쳤다면참고 자료
오츠키 켄스케 , 『문제 해결력을 높이는 알고리즘과 자료구조, 서수환 옮김, 길벗(2022)