ํฐ์คํ ๋ฆฌ ๋ทฐ
[์ฌ๊ทํจ์์ ์คํ ํ๋ ์]์ด์ง์ ์ถ๋ ฅ
choi95 2021. 7. 27. 11:36๋ฌธ์
10์ง์ N์ด ์ ๋ ฅ๋๋ฉด 2์ง์๋ก ๋ณํํ์ฌ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์ธ์.
๋จ, ์ฌ๊ท ํจ์๋ฅผ ์ด์ฉํด์ ์ถ๋ ฅํด์ผ ํฉ๋๋ค.
๋ฌธ์ ํ์ด
์คํ ํ๋ ์(Stack Frame)
- ๋ฉ๋ชจ๋ฆฌ์ ์คํ(stack) ์์ญ์ ํจ์์ ํธ์ถ๊ณผ ๊ด๊ณ๋๋ ์ง์ญ ๋ณ์์ ๋งค๊ฐ ๋ณ์๊ฐ ์ ์ฅ๋๋ ์์ญ
โถ JS: ์ฝ ์คํ(Call Stack)์ ์ ์ฌ๋๋ ํจ์์ ๊ด๋ จ๋ ์ ๋ณด๋ ํจ์ ๋ ์์ปฌ ํ๊ฒฝ(Functional Lexcial Environment)์
๊ตฌ์ฑํ๋ ์ปดํฌ๋ํธ ์ค ํ๋์ธ ํจ์ ํ๊ฒฝ ๋ ์ฝ๋(Functional Environment Record)์ ์ ์ฅ๋๋ค.
ํจ์ ํ๊ฒฝ ๋ ์ฝ๋๋ ๋งค๊ฐ๋ณ์, arguments ๊ฐ์ฒด, ํจ์ ๋ด๋ถ์์ ์ ์ธํ ์ง์ญ ๋ณ์์ ์ค์ฒฉ ํจ์๋ฅผ ๋ฑ๋กํ๊ณ ๊ด๋ฆฌํ๋ค.
- ์คํ ์์ญ์ ํจ์์ ํธ์ถ๊ณผ ํจ๊ป ํ ๋น(push)๋๋ฉฐ, ํจ์์ ํธ์ถ์ด ์ข ๋ฃ๋๋ฉด ์๋ฉธ(pop)
- ํจ์๊ฐ ํธ์ถ๋๋ฉด ์คํ์๋ ํจ์์ ๋งค๊ฐ๋ณ์, ํธ์ถ์ด ๋๋ ๋ค ๋์๊ฐ ๋ฐํ ์ฃผ์๊ฐ, ํจ์์์ ์ ์ธ๋ ์ง์ญ ๋ณ์ ๋ฑ์ด ์ ์ฅ
- ์คํ ์์ญ์ ์ฐจ๋ก๋๋ก ์ ์ฅ๋๋ ํจ์์ ํธ์ถ ์ ๋ณด
โถ ํธ์ถ์ด ๋๋ ๋ค ๋์๊ฐ ๋ฐํ ์ฃผ์๊ฐ์ ์ด๋ป๊ฒ ๊ธฐ์ตํ ๊น?
์คํ(Stack)์ ์๋ฃ ๊ตฌ์กฐ(Data Structure)์ ํ ์ข ๋ฅ์ด๋ฉฐ ๋ ๊ฐ์ ํฌ์ธํฐ๋ก ๋ง์ ์์ ๋ฐ์ดํฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ๋ค.
๋ฒ ์ด์ค ํฌ์ธํฐ(Base Pointer, BP)๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ๋ ๋๋ง๋ค ์์๋๋ก ์์ ์ฌ๋ฆฌ๋ ๊ตฌ์กฐ์ด๋ฉฐ ์๋ก์ด ๋ฐ์ดํฐ๊ฐ
์ถ๊ฐ๋ ์์น๋ฅผ ์คํ ํฌ์ธํฐ(Stack Poiner, SP)๊ฐ ๊ฐ๋ฆฌํค๊ฒ ๋๋ค.
์๋ก์ด ํจ์๋ฅผ ํธ์ถํ๊ธฐ ์ํด ์ ์ผ ๋จผ์ ํด์ผ ํ ์ผ์ ์ดํ ํจ์๊ฐ ํธ์ถ์ด ๋๋ฌ์ ๋ ๋ค์ ํ์ฌ ํจ์์ ์คํ ์์น(์ดํ ํจ์
๋ฅผ ํธ์ถํ ๋ค์ ํ)๋ก ๋์์ค๊ธฐ ์ํด์ ํ์ฌ ์คํ ์์น๋ฅผ ๊ธฐ์ตํ๋ ์ธ์คํธ๋ญ์ ํฌ์ธํฐ(Instruction Pointer, IP) ๋ ์ง์คํฐ
๊ฐ์ ์คํ์ ์ ์ฅํ๋ ๊ฒ์ด๋ค.
์ฌ๊ท ํจ์(Recursion Function)
- ์ปดํจํฐ ๊ณตํ์ ์์ด์ ์ฌ๊ท๋ ์์ ์ ์ ์ํ ๋ ์๊ธฐ ์์ ์ ์ฌ ์ฐธ์กฐํ๋ ๋ฐฉ๋ฒ์ ๋ปํจ
- ์ฌ๊ท ํจ์๋ ์ด๋ค ํจ์์์ ์์ ์ ๋ค์ ํธ์ถํ์ฌ ์์ ์ ์ํํ๋ ๋ฐฉ์์ ํจ์๋ฅผ ์๋ฏธ
- ํจ์ ๋ด์์ ๋ค์ ์์ ์ ํธ์ถํ ํ ๊ทธ ํจ์๊ฐ ๋๋ ๋๊น์ง ํจ์ ํธ์ถ ์ดํ์ ๋ช ๋ น๋ฌธ์ด ์ํ๋์ง ์์
- ์ข ๋ฃ ์กฐ๊ฑด์ด ํจ์ ๋ด์ ๋ฐ๋์ ํฌํจ๋์ด ๋ฌดํ ๋ฃจํ๋ฅผ ๋ฐฉ์งํด์ผ ํจ
์ฝ๋
function solution(n) {
let answer = 0;
function recursion(num) {
if(num === 1 || num === 0) {
return String(num);
}
else return recursion(Math.floor(num / 2)) + String(num % 2); //์ซ์ + ๋ฌธ์ => ๋ฌธ์ ์ฐ์
}
answer = recursion(n);
return answer;
}
console.log(solution(11));
function solution(n) {
let answer = "";
function recursion(num) {
if(num === 0) return;
else {
recursion(Math.floor(num / 2));
answer += String(num % 2);
}
}
recursion(n);
return answer;
}
console.log(solution(11));
'์๊ณ ๋ฆฌ์ฆ > ํ๊ทธ ๋ณ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[DFS]๋ถ๋ถ์งํฉ ๊ตฌํ๊ธฐ (0) | 2021.07.30 |
---|---|
[DFS]์ด์งํธ๋ฆฌ ์ํ (0) | 2021.07.28 |
[๊ฒฐ์ ์๊ณ ๋ฆฌ์ฆ]๋ฎค์ง๋น๋์ค (0) | 2021.07.25 |
์ด๋ถํ์ (0) | 2021.07.25 |
[๊ทธ๋ฆฌ๋]๊ฒฐํผ์ (0) | 2021.07.24 |