์ฌ๊ท๋, ์์ ์ ์ ์ํ ๋ ์์ ์ ์ฐธ์กฐํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ฌ๊ท ํจ์
: ์ฌ๊ท ๊ฐ๋
์ ์ฌ์ฉํ ์ฌ๊ทํจ์๋ ์ข
๋ฃ ์กฐ๊ฑด์ ์ถฉ์กฑํ ๋๊น์ง ์๊ธฐ ์์ ์ ํธ์ถํ๋ ํจ์์ด๋ค. ์ฌ๊ท ํจ์๊ฐ ์คํ๋๋ฉด stack ์๋ฃ๊ตฌ์กฐ์ ํจ์์ ๊ธฐ๋ณธ ์ ๋ณด๊ฐ ์ ์ฅ๋๋ค. ๊ธฐ๋ณธ ์ ๋ณด๊ฐ ์ ์ฅ๋๋ ๊ณต๊ฐ์ stack frame์ด๋ผ๊ณ ํ๋ฉฐ ํด๋น ์์น์๋ ํจ์์ ๊ธฐ๋ณธ ์ ๋ณด์ธ ๋งค๊ฐ๋ณ์, ์ง์ญ๋ณ์, ๋ณต๊ท์ฃผ์ ๋ฑ์ด ์ ์ฅ๋๋ค.
function recursive(์ธ์) {
์์
์ํ
if (์กฐ๊ฑด์ถฉ์กฑ) {
return ๊ฒฐ๊ณผ;
} else {
return recursive(์์
๋์ธ์);
};
//๊ฐ์ด n์ธ ์ซ์๋ฅผ ์
๋ ฅ๋ฐ์ 1 ~ n๊น์ง ์ถ๋ ฅํ๋ ํจ์๋ฅผ ์์ฑํ์ฌ๋ผ.
//์ฌ๊ท์ ์คํ์ ์ฌ์ฉํ์ฌ ๊ตฌํํ ์ ์๋ค.
let num = 3;
function DFS(L) {
if (L === 0) return;
else {
//stack ์๋ฃ๊ตฌ์กฐ์ FILO ํน์ฑ์ผ๋ก ์ธํด console.log๋ ๋ฐ๋ก ์คํ๋์ง ์๋๋ค.
//stack์ ์์ธ ์์
์ด ๋ค์ด์จ ์์ ๋ฐ๋๋ก ์คํ๋๋ฉฐ 1 2 3์ด ์์๋๋ก ์ถ๋ ฅ๋๋ค.
DFS(L-1);
console.log(L); //----- ๋ณต๊ท ์ฃผ์
}
}
DFS(num); // 1 2 3
์ฌ๊ทํจ์๋ก ์์ฑ๋ ์ ์๋ ์ฝ๋๋ for๋ฌธ์ด๋ ๋ฐ๋ณต๋ฌธ์ผ๋ก๋ ์์ฑ์ด ๊ฐ๋ฅํ๋ค. ํ์ง๋ง ์ด๋ค ๊ฒฝ์ฐ์ ํ์์๋ ์ฌ๊ทํจ์๋ก ์์ฑํ๋ ๊ฒ์ด ๋ ํจ์จ์ ์ผ ์ ์๋ค.
์๋ฅผ ๋ค๋ฉด ์ด๋ค Array์ ๋ด๊ธด ์ซ์๋ค์ ์ด ํฉ์ ๊ตฌํด์ผ ํ๋ค๊ณ ํ์! Array ์์ ์ซ์๊ฐ ์ ๋ถ ์ซ์ ํํ๋ผ๋ฉด ๋ฌธ์ ๊ฐ ์์ง๋ง ์ค๊ฐ ์ค๊ฐ ์ฐธ์กฐํ ๋ฐ์ดํฐ๊ฐ ์ฝ์ ๋์ด ์๋ค๋ฉด ๊ทธ ๋ฐ์ดํฐ์ ๊น์ด๋งํผ for๋ฌธ์ ์ถ๊ฐํด์ผํ๋ ๋จ์ ์ด ์๊ธด๋ค. ๊ทธ๋ฐ ๊ฒฝ์ฐ์๋ ์ฌ๊ท๋ฅผ ์ด์ฉํ๋ฉด ์ฝ๊ฒ ํด๊ฒฐํ ์ ์๋ค.
ํ์ง๋ง ์ฌ๊ทํจ์์๋ ๋จ์ ์ด ์๋ ๊ฒ์ ์๋๋ค. ์ฌ๊ทํจ์๋ ํธ์ถ๋ ๋๋ง๋ค ๋ฉ๋ชจ๋ฆฌ์ ์คํ์ ์์ธ๋ค. ํ๊ณ์น ์ด์์ผ๋ก ํธ์ถ๋์ ์คํ์ด ๋์น๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ์ผ๋ก ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์๋ค. ์ด๋ฐ ๋ฌธ์ ๋๋ฌธ์ ๋ง์ ์ธ์ด๋ค์ด Tali Call Optimization
์ด๋ผ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.(JavaScript๋ ES6๋ถํฐ ํด๋น ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.)
์ถ์ฒ: YOUTUBE-์ํํ ์ฝ๋ฉ์ฌ์