์ฌ๊ท ํจ์์ ๋ํด ํ์ตํ๋ค.
์ฌ๊ท : ์๋์ ์๋ฆฌ๋ก ๋๋์ ๊ฐ๊ฑฐ๋ ๋๋์ ์ด
์ต์ ํ ๊ธฐ๋ฒ(memoization) : ๋ฉ๋ชจ๋ฅผ ํ๋ ๊ฒ ์ฒ๋ผ ๊ฐ์ ๊ธฐ์ตํ๊ณ ํ์ ํ ๋ ์ฌ์ฌ์ฉ
์ฌ๊ทํจ์ ํธ์ถ์ด ๋ง์ ์ง ์๋ก ์คํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ด ์ฌ์ฉํด ์ฑ๋ฅ ์ด์๊ฐ ๋ฐ์ํ ์ ์๋ค.
์ฌ๊ทํจ์๋ฅผ ์ฌ์ฉํ ๋๋ ์ ์ ํ ์ข ๋ฃ ์กฐ๊ฑด๊ณผ ์ต์ ํ๋ฅผ ๊ณ ๋ คํด์ผํ๋ค.
function factorial(n) { if(n === 0){ return 1; }else { return n * factorial(n - 1); } }
n
์ด0
์ธ ๊ฒฝ์ฐ1
๋ฅผ ๋ฐํํ๊ณ , ๊ทธ๋ฌ์ง ์์ ๊ฒฝ์ฐn
๊ณผfactorial(n-1)
์ ๊ณฑ์ ๋ฐํํ๋ค.
factorial(n - 1)
์ ํจ์ ์์ ์ ๋ค์ ํธ์ถํดn-1
์ ๋ํ ํฉํ ๋ฆฌ์ผ ๊ฐ์ ๊ณ์ฐํ๋ค.
=> n์ธ 0์ด ๋ ๋ ๊น์ง ๋ฐ๋ณต
1. ์ฌ๊ท ํจ์์ ์ ๋ ฅ ๊ฐ๊ณผ ์ถ๋ ฅ ๊ฐ ์ ์ํ๊ธฐ
2. ๋ฌธ์ ๋ฅผ ์ชผ๊ฐ๊ณ ๊ฒฝ์ฐ์ ์๋ฅผ ๋๋๊ธฐ
3. ๋จ์ํ ๋ฌธ์ ํด๊ฒฐํ๊ธฐ
4. ๋ณต์กํ ๋ฌธ์ ํด๊ฒฐํ๊ธฐ
5. ์ฝ๋ ๊ตฌํํ๊ธฐ
function recursive(input1, input2, ...) {
// base case : ๋ฌธ์ ๋ฅผ ๋ ์ด์ ์ชผ๊ฐค ์ ์๋ ๊ฒฝ์ฐ
if (๋ฌธ์ ๋ฅผ ๋ ์ด์ ์ชผ๊ฐค ์ ์์ ๊ฒฝ์ฐ) {
return ๋จ์ํ ๋ฌธ์ ์ ํด๋ต;
}
// recursive case : ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ
return ๋ ์์ ๋ฌธ์ ๋ก ์๋กญ๊ฒ ์ ์๋ ๋ฌธ์
}
์ฌ๊ท ํจ์ ๊ด๋ จ๋ ์๊ณ ๋ฆฌ์ฆ์ ํ์๋ค.
์ ๋ฏ ํ๋ฉด์๋ ์ ๋ชจ๋ฅด๊ฒ ๋ค.
๋ฐ๋ณต๋ฌธ์ผ๋ก ํ๋ฉด ๊ธ๋ฐฉ ํธ๋๋ฐ ์ฌ๊ท์ ์ผ๋ก ํ๋ ค๊ณ ํ๋ ์กฐ๊ธ ํค๋งธ๋ ๊ฑฐ ๊ฐ๋ค.