ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๋ฌธ์ œ

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));
๋Œ“๊ธ€
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
TAG
more
ยซ   2025/01   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
๊ธ€ ๋ณด๊ด€ํ•จ