
๐์ฌ๊ท: ์์ ์ ์ ์ํ ๋, ์๊ธฐ ์์ ์ ์ฌํธ์ถํ๋ ๊ฒ์ ๋งํ๋ค.
๋ํ์ ์ธ ์ฌ๊ทํจ์๋ ํฉํ ๋ฆฌ์ผ๊ณผ ํผ๋ณด๋์น๊ฐ ์๋๋ฐ, ์ง๊ฒน๊ฒ ๋ดค์ผ๋ ์์ธํ ํจ์ ์ ์์ ๋์ ๊ณผ์ ์ ์๋ตํ๋ค.

๋๋ถ๋ถ์ ์ฌ๊ทํจ์๋ ์ ํ์(recurrence relation)์ผ๋ก ํํ๋๋ค. ์ฆ, ํฉํ ๋ฆฌ์ผ์ ๋ก ํํ๋๊ณ , ํผ๋ณด๋์น ์์ด์
(๋จ, n์ 2 ์ด์์ ์์ฐ์)๋ก ํํ๋๋ค.(๐์ถํ์ dp์์ ๋ง์ด ํ์ฉ๋๋ ์ฐธ๊ณ ํด๋์.)
๐ก์ฌ๊ทํจ์๋ ์๊ธฐ ์์ ์ ๊ณ์ํด์ ํธ์ถํ๋๋ฐ, ์ด๋ base condition์ ๊ฑธ์ด๋์ง ์์ผ๋ฉด stackoverflow๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ๋ฐ๋์ if๋ฌธ์ผ๋ก ๊ฑธ์ด๋์.
private static int fib(int n) {
// base condition(f(0) = 1, f(1) = 1)
if (n == 0 || n == 1)
return 1;
return fib(n - 1) + fib(n - 2);
}
๐ก์ฐธ๊ณ ๋ก ๋ฉ์๋์ static์ ์ ์ธํ ์ด์ ๋, ํด๋์ค ๋ฐ๋ก ๋ง๋ค๊ธฐ ๊ท์ฐฎ์์ ๋ฉ์ธ ํจ์์์ ๋ฐ๋ก ๋ฉ์๋๋ฅผ ํธ์ถํ๊ธฐ ์ํด์๋ค.
(์๋ฐ๋ ํด๋์ค ๋ก๋ ๊ธฐ๋ฐ์ผ๋ก JVM์์ ๋์ํ๊ธฐ ๋๋ฌธ์ static์ ์ ์ธํ์ง ์์ผ๋ฉด non-static method๋ ์ธ์คํด์ค ์์ด๋ ๋์ํ์ง ์๋๋ค๋ ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฌ๋ค)
์๊ฐ๋ณต์ก๋๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฝ๋๋ก ๊ตฌํํ๊ธฐ ์ ์ ํญ์ ๋จผ์ ์ดํดํด์ผ ๋ฐํ์ ์ด๊ณผ ์๋ฌ์ ๋น ์ง์ง ์์ผ๋ฏ๋ก ๋งค์ฐ ์ค์ํ๋ค!
์ฌ๊ท์ ์๊ฐ๋ณต์ก๋ = ์ฌ๊ท ํจ์ ํธ์ถ ์ x (์ฌ๊ท ํจ์ ํ๋๋น) ์๊ฐ๋ณต์ก๋
์์ ์ดํด๋ณธ ํฉํ ๋ฆฌ์ผ์ ์ด n๋ฒ ํธ์ถํ๋๋ฐ base condition์ ๋ง๋๋ฉด return๋ฌธ์ ์คํํ๋ฏ๋ก ์์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค. ๋ฐ๋ผ์ O(N)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค. ๋ฐ๋ฉด์, ํผ๋ณด๋์น ํจ์๋ f(n - 1)๊ณผ f(n - 2)๋ฅผ ๊ณ์ํด์ 2๋ฐฐ์ฉ ํธ์ถํ๊ธฐ ๋๋ฌธ์ 2^n์ด ๊ฑธ๋ฆฌ๊ณ ๋ง์ฐฌ๊ฐ์ง๋ก return๋ฌธ๋ง ์คํํ๊ธฐ ๋๋ฌธ์
์ด ๊ฑธ๋ฆฐ๋ค.