์ ์ฒด ๋ฌธ์ ๋ฅผ ์์ ๋ฌธ์ ๋ก ๋จ์ํ ํ ํ ์ ํ์์ผ๋ก ๋ง๋ค์ด ์ฌ๊ท์ ์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ
( ํน์ ๋ฒ์๊น์ง์ ๊ฐ์ ๊ตฌํ๊ธฐ ์ํด ๊ทธ ์ ์ ๊ฐ๋ค์ ์ด์ฉํ์ฌ ํจ์จ์ ์ผ๋ก ๊ฐ์ ๊ตฌํ๋ ๋ฐฉ๋ฒ )
ํผ๋ณด๋์น ์์ด๊ณผ ๊ฐ์ด ์ด๋ฏธ ๊ณ์ฐ ํ ๊ฐ์ธ ๋ฐ ๋ถ๊ตฌํ๊ณ ์ฌ๊ท๋ฅผ ํตํ์ฌ ์ฌ๋ฌ๋ฒ ๋ฐ๋ณตํ๊ฒ ๋๋ฉด ๊ต์ฅํ ๋นํจ์จ ์ ์ด๊ธฐ ๋๋ฌธ์ ์ด๋ฏธ ๊ณ์ฐํ ๊ฐ์ ์ ์ฅํ์ฌ ๊ฐ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด dp์ด๋ค.
int fibonacci(int n)
{
if (n<=2)
return 1;
else
return fibo(n-1) + fibo(n-2);
}int fibonacci_data[100] = {0,}; //0์ผ๋ก ์ด๊ธฐํ
int fibonacci(int n)
{
if (n<=2)
return 1;
if (fibonacci_data[n]==0) //์ฒ์ ๊ณ์ฐ๋ ์ฐ์ฐ์ด๋ผ๋ฉด, ๊ทธ ์ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ์ฌ ๊ฐ ์ ์ฅ
fibonacci_data[n] = fibonacci(n-1) + fibonacci(n-2);
return fibonacci_data[n];
}์ฒ์ ๊ณ์ฐ๋ ์ฐ์ฐ์ ์๋ก ์ ์ฅํด๋๊ณ , ์ ์ฅํด๋ ๋ฐ์ดํฐ๋ค์ ๊ฐ์ง๊ณ ์ถ๊ฐ ์ฐ์ฐ ์์ด ๊ฐ์ ๊ตฌํ๊ฒ ๋๋ค.
๋ฌธ์ ๋ฅผ ์์์ ์๋๋ก ์งํํ๋ฉฐ ํธ๋ ๋ฐฉ์
int fibonacci_data[100] = {0,}; //0์ผ๋ก ์ด๊ธฐํ
int fibonacci(int n)
{
if (n<=2)
return 1;
if (fibonacci_data[n]==0) //์ฒ์ ๊ณ์ฐ๋ ์ฐ์ฐ์ด๋ผ๋ฉด, ๊ทธ ์ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ์ฌ ๊ฐ ์ ์ฅ
fibonacci_data[n] = fibonacci(n-1) + fibonacci(n-2);
return fibonacci_data[n];
}์์์ ๋ณด์ฌ๋๋ฆฐ ์ฝ๋์ ๊ฐ์ด ๊ฐ์ ๋ฉ๋ชจํด ๋์๋ค๊ฐ ํ์ํ ๋ ๊บผ๋ด์ด ์ฌ์ฉํ๋ ๋ฐฉ์.
๋ฉ๋ชจ์ ๋ค์ด์
๋์ผํ ๋ฌธ์ ๋ฅผ ๋ฐ๋ณตํด์ผ ํ ๊ฒฝ์ฐ, ํ ๋ฒ ๊ณ์ฐ๋ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํด ๋์๋ค๊ฐ ํ์ฉํ๋ ๋ฐฉ์์ผ๋ก ์ค๋ณต ๊ณ์ฐ์ ์ค์ด๋ ๊ฒ์ ๋ฉ๋ชจ์ด์ ์ด์ (Memoization)์ด๋ผ๊ณ ํ๋ค.
๋ฌธ์ ํ์ด๋ฅผ ์๋์์๋ถํฐ ์ฐจ๊ณก์ฐจ๊ณก ์ ์ฅํด ๋๊ฐ๋ฉฐ ํธ๋ ๋ฐฉ์ ( ์ํฅ์ ๊ณ์ฐ๋ฒ )
int fibonacci_data[100];
int fibonacci(int n)
{
fibonacci_data[0] = 0;
fibonacci_data[1] = 1;
for (int i=2; i<=n; i++){
fibonacci_data[i] = fibonacci_data[i - 1] + fibonacci_data[i - 2];
}
return fibonacci_data[n];
}top-down๋ฐฉ์๊ณผ๋ ๋ค๋ฅด๊ฒ ์ฌ๊ท๋ฅผ ํตํด ๊ณ์ฐํ ๊ฐ์ ํ์ธํ๊ณ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋ผ ๋ชฉํํ๋ n๊น์ง ๊ตฌํ๊ธฐ ์ํด ์ด๊ธฐ ๊ฐ ๋ถํฐ ์ฐจ๊ณก์ฐจ๊ณก ์์๊ฐ๋ฉฐ ํธ๋ ๋ฐฉ์์ด๋ค.