๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Frontend Dev/๐Ÿฅ ์ฝ”๋“œ์Šคํ…Œ์ด์ธ  FE ๋ถ€ํŠธ์บ ํ”„

Section3 Unit1 [์ž๋ฃŒ๊ตฌ์กฐ/์•Œ๊ณ ๋ฆฌ์ฆ˜] ์žฌ๊ท€

๋ฐ˜์‘ํ˜•


Section3 Unit1 [์ž๋ฃŒ๊ตฌ์กฐ/์•Œ๊ณ ๋ฆฌ์ฆ˜] ์žฌ๊ท€

 

๐Ÿ“Œ Chapter1. ์žฌ๊ท€์˜ ์ดํ•ด

• ์žฌ๊ท€ํ•จ์ˆ˜๋ž€? ์ž๊ธฐ ์ž์‹ ์„ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜

• ์žฌ๊ท€๋Š” ์ฃผ์–ด์ง„ ๋ฌธ์ œ๋ฅผ ๋น„์Šทํ•œ ๊ตฌ์กฐ์˜ ๋” ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋‚˜ ์ค‘์ฒฉ๋œ ๋ฐ˜๋ณต๋ฌธ์ด ๋งŽ๊ฑฐ๋‚˜ ๋ฐ˜๋ณต๋ฌธ์˜ ์ค‘์ฒฉ ํšŸ์ˆ˜๋ฅผ ์˜ˆ์ธกํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๊ธฐ ์ ํ•ฉํ•˜๋‹ค.

 

 

๐Ÿ“Œ Chapter2. ์žฌ๊ท€์˜ ํ™œ์šฉ

โœ”๏ธ ์žฌ๊ท€์ ์œผ๋กœ ์‚ฌ๊ณ ํ•˜๊ธฐ

function arrSum (arr) {

  // base case : ๋ฌธ์ œ๋ฅผ ๋” ์ด์ƒ ์ชผ๊ฐค ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ (์žฌ๊ท€์˜ ๊ธฐ์ดˆ) -> ์žฌ๊ท€์˜ ํƒˆ์ถœ ์กฐ๊ฑด
  if (arr.length === 0) {
    return 0
  }

return arr.shift() + arrSum(arr);
}

→ ๋‚ด๊ฐ€ ๊ฐ„๊ณผํ•˜๊ณ  ์žˆ์—ˆ๋˜ ๋ถ€๋ถ„์ธ๋ฐ, ํ•จ์ˆ˜์˜ ์ข…๋ฃŒ๋Š” return์„ ํ–ˆ์„ ๋•Œ์ด๋‹ค. 

→ ๋ฌดํ•œ๋ฃจํ”„ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ์žฌ๊ท€์˜ ํƒˆ์ถœ ์กฐ๊ฑด์„ ๊ตฌ์„ฑํ•ด์•ผ ํ•œ๋‹ค.

 

 

โœ”๏ธ ์ผ๋ฐ˜์ ์ธ ์žฌ๊ท€ ํ•จ์ˆ˜์˜ ํ…œํ”Œ๋ฆฟ

 

1. ๋ฌธ์ œ๋ฅผ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ณ„์† ์ชผ๊ฐœ๊ธฐ → ์ชผ๊ฐœ๋Š” ๋ฐฉ์‹์ด recursive case

2. ๋” ์ด์ƒ ์•ˆ ์ชผ๊ฐœ์ง€๋ฉด ๊ทธ๊ฒƒ์ด base case → ์žฌ๊ท€ ํ•จ์ˆ˜์˜ ํƒˆ์ถœ ์กฐ๊ฑด

3. base case ํ•ด๊ฒฐํ•˜๊ธฐ → ์ชผ๊ฐœ์กŒ๋˜ ๋ฌธ์ œ๊ฐ€ ํ•œ ๋ฒˆ์— ํ•ด๊ฒฐ!

function recursive(input1, input2, ...) {
  // base case : ๋ฌธ์ œ๋ฅผ ๋” ์ด์ƒ ์ชผ๊ฐค ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ
  if (๋ฌธ์ œ๋ฅผ ๋” ์ด์ƒ ์ชผ๊ฐค ์ˆ˜ ์—†์„ ๊ฒฝ์šฐ) {
    return ๋‹จ์ˆœํ•œ ๋ฌธ์ œ์˜ ํ•ด๋‹ต;
  }

  // recursive case : ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ
  return ๋” ์ž‘์€ ๋ฌธ์ œ๋กœ ์ƒˆ๋กญ๊ฒŒ ์ •์˜๋œ ๋ฌธ์ œ
}

 

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป example. factorial

// ๋ฌธ์ œ : ์ž์—ฐ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›๊ณ , ์ž…๋ ฅ๋ฐ›์€ ์ˆ˜๋ถ€ํ„ฐ 1๊นŒ์ง€์˜ ์ž์—ฐ์ˆ˜๋ฅผ ๋ชจ๋‘ ๊ณฑํ•œ ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋Š” ์žฌ๊ท€ ํ•จ์ˆ˜ `fac` ์„ ์ž‘์„ฑํ•˜์„ธ์š”.
//   ์˜ˆ1) fac(5)  ===  5 * 4 * 3 * 2 * 1  ===  120
//   ์˜ˆ2) fac(3)  ===  3 * 2 * 1  ===  6

function fac(n) {
    if (n === 1) {
        return 1;
    }

    return n * fac(n-1);
}

console.log(fac(5))

 

โœ๏ธ ์—ฐ์Šต๋ฌธ์ œ.

( ๐Ÿ”ฅ ์—…๋ฐ์ดํŠธ ์˜ˆ์ • โœจ )

 


๐ŸŒ™  ์˜ค๋Š˜์˜ ํšŒ๊ณ 

 ์•„์นจ์„ ์‹œ์ž‘ํ•  ๋•Œ๊นŒ์ง€๋งŒ ํ•ด๋„ ๊ธˆ์š”์ผ์ด๋ผ ๊ธฐ๋ถ„์ด ์ข‹์•˜๋Š”๋ฐ, ์ •๊ทœ ์ˆ˜์—…์ด ๋๋‚˜๋‹ˆ ์ฃผ๋ง์ด๋ผ๋Š” ์ฆ๊ฑฐ์›€ ๋ณด๋‹ค ํ•œ์ˆจ์ด ๋Š˜์–ด๋‚ฌ๋‹ค. ์žฌ๊ท€ํ•จ์ˆ˜…? ๋„ˆ๋ฌด ์–ด๋ ค์šด๋ฐ…? ์ง€๋‚œ ์„น์…˜์˜ ๊ณ ์ฐจํ•จ์ˆ˜์— ์ด์–ด ๋˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋Š” ๋‚˜๋ฅผ ์‹œํ—˜์— ๋“ค๊ฒŒ ํ•œ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค 0๋‹จ๊ณ„์ธ ๋‚˜์—๊ฒŒ ์ด๋Ÿฐ ๋ฌธ์ œ๋Š”… ์‚ฌ๊ณ ์˜ ํ™•์žฅ์ด ๋ถˆ๊ฐ€ํ•˜๋‹จ ๋ง์ด์ง€…

 ๊ทธ๋Ÿฌํ•œ ์ด์œ ๋กœ ๋‚˜๋Š” ๊ธ‰ ์ €๊ธฐ์••์ด ๋˜์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค..๐Ÿ˜ง ํšŒ๋ณตํ•ด์•ผ์ง€, ํšŒ๋ณต.

 Section2์˜ ๋ฐ์ผ๋ฆฌ ์ฝ”๋”ฉ์„ ํ’€๋ฉด์„œ๋„ ์‚ฌ์‹ค ๋„ˆ๋ฌด ์–ด๋ ค์›Œ์„œ ์„ ํƒ๊ณผ ์ง‘์ค‘์„ ํ•ด์•ผํ•˜๋‚˜ ์‹ถ์—ˆ๋‹ค. ์ด๋Ÿฐ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„ ๋ฌธ์ œ์— ๋„ˆ๋ฌด ์‹œ๊ฐ„์„ ์Ÿ์„ ํ•„์š”๊ฐ€ ์žˆ์„๊นŒ, ์‹ถ๊ธฐ๋„ ํ–ˆ๋‹ค. ์•ˆ ํ’€๋ฆฌ๋Š” ๋ฌธ์ œ ๋ถ™์žก๊ณ  ์žˆ๋Š” ๊ฒƒ๋ณด๋‹ค ๋ฆฌ์•กํŠธ์— ๋” ์‹ ๊ฒฝ์„ ์“ฐ๋Š”๊ฒŒ ๋” ์ข‹์ง€ ์•Š์„๊นŒ, ๋ผ๋Š” ์ƒ๊ฐ๋„ ๋“ค์—ˆ๋‹ค.

 ๊ทธ๋Ÿฐ๋ฐ ์กฐ๊ธˆ๋งŒ ๋” ์ƒ๊ฐ์„ ํ•ด๋ณด๋‹ˆ ์–ด์ฉŒ๋ฉด ๊ธฐ๋ณธ์ ์ผ์ง€๋„ ๋ชจ๋ฅด๋Š” ๋ฌธ์ œ, ์ด ์ •๋„์˜ ๋ฌธ์ œํ•ด๊ฒฐ๋Šฅ๋ ฅ์€ ์žˆ์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹๊นŒ ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ๋„ˆ๋ฌด ์‰ฝ๊ฒŒ(?) ํฌ๊ธฐํ•ด๋ฒ„๋ฆฌ๋Š”๊ฒŒ ํ˜„๋ช…ํ•œ ์„ ํƒ์ด ์•„๋‹ˆ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์‹ค ์ž˜ํ•˜๊ณ  ์‹ถ๊ธฐ๋„ ํ–ˆ๊ณ . ๊ทธ๋Ÿฌ๋‹ˆ ๋‹ค์‹œ ํž˜๋‚ด๋ด์•ผ์ง€. ๋„ˆ๋ฌด ์ŠคํŠธ๋ ˆ์Šค ๋ฐ›์ง€ ๋ง๊ณ , ๋‚ด๊ฐ€ ๋งŒ์กฑํ•  ๋งŒํผ์€ ํ•˜์ž.

๋ฐ˜์‘ํ˜•