Factorialize a Number
๐ฅํฌ์คํ ์ ์ ์์์ผ ํ ํจ์์ ํน์ฑ
- ํจ์ return์ ๋ง๋๋ฉด ์ ์ด๊ถ์ด ํจ์ ๋ฐ์ผ๋ก ๋๊ฐ๊ฒ ๋๋ค.
- ๋ฆฌํด์ด ์๋ ํจ์๋ undefined๋ฅผ ๋ฆฌํดํ๋ค.
๐ฅFactorialize a Number๋ฅผ ๊ตฌํด๋ณด์
โก๏ธ ์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ
function factorialize(num) {
let product;
for (product = 1; num > 0; num--) {
product *= num;
}
return product;
}
factorialize(5);
์ฝ๋ ํด์
- product ๋ณ์๊ฐ 1๋ก ์ด๊ธฐํ๋์ด ์๋ค.
num = 0
์ธ ๊ฒฝ์ฐ์ ๋ฃจํ ์กฐ๊ฑด์ด ๊ฑฐ์ง์ด๋ฏ๋ก ์คํ๋์ง ์๊ณ- product๊ฐ 1๋ก ์ด๊ธฐํ๋์๊ธฐ ๋๋ฌธ์ ๋ฆฌํด๋ฌธ์ด ์คํ๋ ๊ฒ์ด๋ค.
โก๏ธ ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ
๐ฅ ๊ธฐ๋ณธ ์ฌ๊ท ํจ์
- ์ฌ๊ทํจ์๋ ํจ์ ๋ด๋ถ์์ ์๊ธฐ ์์ ์ ํธ์ถํด์ ์คํํ๋ ํจ์๋ฅผ ๋งํ๋ค
function factorialize(num) {
if (num === 0) {
return 1;
}
// ํจ์๊ฐ ๋ค์ ํธ์ถ๋ ๋ ์ธ์๋ก num-1์ ์ ๋ฌํจ
return num * factorialize(num - 1);
}
factorialize(5);
์ฝ๋ ํด์
- ์ฌ๊ทํจ์์ฌ์ฉ
num === 0
์ด๋ผ๋ฉด 1์ ๋ฆฌํดํ๊ณ ์ฌ๊ท๋ฅผ ๋๋ธ ๋ค ์คํ์๊ฒ ์์ ๋ ๋ฒจ๋ก ์ด ๊ฐ์ ์ ํํ๋ผ๊ณ ์๋ ค์ค๋ค.- ๋ง์ฝ ์ด ์กฐ๊ฑด์ ๊ฐ์ง์ง ์๋๋ค๋ฉด ์ฌ๊ท๋ ์คํ์ด ๋ญ๋น๋ ๋๊น์ง ๊ณ์ ๋ฐ๋ณต๋ ๊ฒ์ด๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ํ๊ฐ ์์
factorialize(5)
๋ฅผ ํธ์ถํ๋ฉด
factorialize(5);
5 * factorialize(4);
5 * 4 * factorialize(3);
5 * 4 * 3 * factorialize(2);
5 * 4 * 3 * 2 * factorialize(1);
5 * 4 * 3 * 2 * 1;
120;
๐ฅ ๋ ๋ค๋ฅธ ์ฌ๊ทํจ์, ๊ผฌ๋ฆฌ ํจ์
function factorialize(num, factorial = 1) {
if (num == 0) {
return factorial;
} else {
return factorialize(num - 1, factorial * num);
}
}
factorialize(5);
์ฝ๋ ํด์
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ต์ ํํ๊ธฐ์ํด์ Tail Recursion ์ฌ์ฉํ๋ค.
- ์ฌ๊ท ํจ์ ํธ์ถ์ ๊ฐ๋ณ๋ก ํ๊ฐํด์
factorial
๊ฐ์ ์ ๋ฐ์ดํธํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ํ๊ฐ ์์
factorialize(5, 1);
factorialize(4, 5);
factorialize(3, 20);
factorialize(2, 60);
factorialize(1, 120);
factorialize(0, 120);
120;
๐ฅ head recursion๊ณผ tail recursion์ ์ฐจ์ด
head recursion
- ์ฌ๊ท ํธ์ถ์ ๋จผ์ ํ๊ณ ๊ทธ ๋ค์์ ํธ์ถ์ ๋ฆฌํด ๊ฐ์ ๊ฐ์ง๊ณ ๊ฒฐ๊ณผ๋ฅผ ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ์ด๋ค.
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ์ฌ๊ท ํธ์ถ์ ๋ฆฌํดํ ๋๊น์ง ๊ณ์ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ ํด์๊ธฐ๊ฐ ํ๊ฐ๋ฅผ ์์ํ๊ธฐ ์ ์ ์ฌ๊ทํจ์๊ฐ ํธ์ถ๋๋ค.
tail recursion
- tail ์ฌ๊ท์์๋ ๊ณ์ฐ์ ๋จผ์ ํ๊ณ ํ์ฌ ์คํ ์ ๊ฐ์ ๋ค์ ์ฌ๊ท ์คํ ์ผ๋ก ์ ๋ฌํ๋ฉด์ ๊ทธ ๋ค์์ ์ฌ๊ท ํธ์ถ์ ์คํํ๋ค.
- ๊ฐ๊ฐ์ ์ฌ๊ท ํธ์ถ์ ํ๊ฐํ๋ฉด์ factorial์ ์ ๋ฐ์ดํธ ๋๋ค.
- ๋ฒ ์ด์ค ์ผ์ด์ค์ ๋๋ฌํ ๋๊น์ง ๋ชจ๋ ํ๊ฐ์ ๊ณ์ฐ์ด ์คํ์ ์ ์ฅ๋๋ ํค๋ ์ฌ๊ทํจ์์ ๋ค๋ฅธ ์ ์ด๋ค.