Jieunny์˜ ๋ธ”๋กœ๊ทธ

S3) Unit 1. [์ž๋ฃŒ๊ตฌ์กฐ/์•Œ๊ณ ๋ฆฌ์ฆ˜] ์žฌ๊ท€ ๋ณธ๋ฌธ

CodeStates/learning contents

S3) Unit 1. [์ž๋ฃŒ๊ตฌ์กฐ/์•Œ๊ณ ๋ฆฌ์ฆ˜] ์žฌ๊ท€

Jieunny 2023. 2. 13. 11:30

๐Ÿ“ฃ  ์žฌ๊ท€์˜ ๊ฐœ๋…

โœ”๏ธ ์žฌ๊ท€ : ์›๋ž˜์˜ ์ž๋ฆฌ๋กœ ๋˜๋Œ์•„๊ฐ€๊ฑฐ๋‚˜ ๋˜๋Œ์•„์˜ด.

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

 

๐Ÿ“ฃ  ์žฌ๊ท€๋กœ ๋ฌธ์ œ ํ•ด๊ฒฐํ•˜๊ธฐ

1๏ธโƒฃ ๋ฌธ์ œ๋ฅผ ์ข€ ๋” ์ž‘๊ฒŒ ์ชผ๊ฐ ๋‹ค.

2๏ธโƒฃ 1๋ฒˆ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ, ๋ฌธ์ œ๊ฐ€ ๋”๋Š” ์ž‘์•„์ง€์ง€ ์•Š์„ ๋•Œ๊นŒ์ง€, ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„๋กœ ๋ฌธ์ œ๋ฅผ ์ชผ๊ฐ ๋‹ค.

3๏ธโƒฃ ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„์˜ ๋ฌธ์ œ๋ฅผ ํ’‚์œผ๋กœ์จ ์ „์ฒด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.

 

โœ”๏ธ ์˜ˆ์‹œ

โžฐ ๋ฐฐ์—ด [1, 2, 3, 4, 5]์˜ ํ•ฉ์„ ๊ตฌํ•˜๋Š” ๊ณผ์ •์„ ์žฌ๊ท€๋กœ ํ’€์–ด๋ณด์ž.

1. ๋ฌธ์ œ๋ฅผ ์ž‘๊ฒŒ ์ชผ๊ฐœ๊ธฐ

arrSum([1, 2, 3, 4, 5]) === 1 + arrSum([2, 3, 4, 5])
arrSum([2, 3, 4, 5]) === 2 + arrSum([3, 4, 5])

 

2. ๋ฌธ์ œ๋ฅผ ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„๋กœ ์ชผ๊ฐœ๊ธฐ

โžฐ ๋” ์ด์ƒ ์ชผ๊ฐค ์ˆ˜ ์—†๋Š” ์ƒํƒœ๊นŒ์ง€ ์ชผ๊ฐ ๋‹ค.

arrSum([3, 4, 5]) === 3 + arrSum([4, 5])
arrSum([4, 5]) === 4 + arrSum([5])
arrSum([5]) === 5 + arrSum([])

 

3. ๋ฌธ์ œ ํ•ด๊ฒฐํ•˜๊ธฐ

โžฐ ๋„๋‹ฌํ•œ ๊ฐ€์žฅ ์ž‘์€ ๋ฌธ์ œ๋Š” arrSum([]) ์ด๋ฏ€๋กœ, 0์„ ๋ฆฌํ„ดํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

โžฐ arrSum ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด๊ฐ’์ด ๋‚˜์˜ค๋ฉด์„œ ์—ฐ์‡„์ ์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๊ณ , ์ตœ์ข…์ ์œผ๋กœ๋Š” ๋ฌธ์ œ ์ „์ฒด๊ฐ€ ํ•ด๊ฒฐ๋œ๋‹ค.

function arrSum (arr) {
  // ๋นˆ ๋ฐฐ์—ด์„ ๋ฐ›์•˜์„ ๋•Œ 0์„ ๋ฆฌํ„ดํ•˜๋Š” ์กฐ๊ฑด๋ฌธ
  //   --> ๊ฐ€์žฅ ์ž‘์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์ฝ”๋“œ & ์žฌ๊ท€๋ฅผ ๋ฉˆ์ถ”๋Š” ์ฝ”๋“œ
  if (arr.length === 0) {
    return 0
  }

  // ๋ฐฐ์—ด์˜ ์ฒซ ์š”์†Œ + ๋‚˜๋จธ์ง€ ์š”์†Œ๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด์„ ๋ฐ›๋Š” arrSum ํ•จ์ˆ˜
  //   --> ์žฌ๊ท€(์ž๊ธฐ ์ž์‹ ์„ ํ˜ธ์ถœ)๋ฅผ ํ†ตํ•ด ๋ฌธ์ œ๋ฅผ ์ž‘๊ฒŒ ์ชผ๊ฐœ๋‚˜๊ฐ€๋Š” ์ฝ”๋“œ
	return arr.shift() + arrSum(arr)
}

 

๐Ÿ“ฃ  ์žฌ๊ท€๋Š” ์–ธ์ œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์ข‹์„๊นŒ?

1๏ธโƒฃ ์ฃผ์–ด์ง„ ๋ฌธ์ œ๋ฅผ ๋น„์Šทํ•œ ๊ตฌ์กฐ์˜ ๋” ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ

2๏ธโƒฃ ์ค‘์ฒฉ๋œ ๋ฐ˜๋ณต๋ฌธ์ด ๋งŽ๊ฑฐ๋‚˜ ๋ฐ˜๋ณต๋ฌธ์˜ ์ค‘์ฒฉ ํšŸ์ˆ˜๋ฅผ ์˜ˆ์ธกํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒฝ์šฐ

 

โ—๏ธ ์žฌ๊ท€๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ์— ์žฌ๊ท€๋ฅผ ์ ์šฉํ•œ ์ฝ”๋“œ๊ฐ€ ๋”์šฑ ๊ฐ„๊ฒฐํ•˜๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค.


๐Ÿ“ฃ  ์žฌ๊ท€์ ์œผ๋กœ ์‚ฌ๊ณ ํ•˜๊ธฐ

1๏ธโƒฃ ์žฌ๊ท€ ํ•จ์ˆ˜์˜ ์ž…๋ ฅ๊ฐ’๊ณผ ์ถœ๋ ฅ๊ฐ’ ์ •์˜ํ•˜๊ธฐ

โžฐ ๋ฌธ์ œ๋ฅผ ๊ฐ€์žฅ ์ถ”์ƒ์ ์œผ๋กœ, ๊ฐ€์žฅ ๋‹จ์ˆœํ•˜๊ฒŒ ์ •์˜ํ•œ๋‹ค.

โžฐ ํ•จ์ˆ˜์˜ ์ž…์ถœ๋ ฅ ๊ฐ’์„ ์ •ํ•˜๋Š” ๊ฒƒ์€ ๊ทธ ์ฒซ ์ถœ๋ฐœ์ ์ด๋‹ค.

 

2๏ธโƒฃ ๋ฌธ์ œ๋ฅผ ์ชผ๊ฐœ๊ณ  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‚˜๋ˆ„๊ธฐ

โžฐ ๋ฌธ์ œ๋ฅผ ์ชผ๊ฐค ๊ธฐ์ค€์„ ์ •ํ•˜๊ณ , ์ •ํ•œ ๊ธฐ์ค€์— ๋”ฐ๋ผ ๋ฌธ์ œ๋ฅผ ํฐ ๊ฒฝ์šฐ์™€ ์ž‘์€ ๊ฒฝ์šฐ๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

โžฐ ์ž…๋ ฅ๊ฐ’์ด๋‚˜ ๋ฌธ์ œ์˜ ์ˆœ์„œ์™€ ํฌ๊ธฐ๋ฅผ ๊ณ ๋ คํ•œ๋‹ค.

 

3๏ธโƒฃ ๋‹จ์ˆœํ•œ ๋ฌธ์ œ ํ•ด๊ฒฐํ•˜๊ธฐ

โžฐ ๋ฌธ์ œ๋ฅผ ์—ฌ๋Ÿฌ ๊ฒฝ์šฐ๋กœ ๊ตฌ๋ถ„ํ•œ ๋‹ค์Œ, ๊ฐ€์žฅ ํ•ด๊ฒฐํ•˜๊ธฐ ์‰ฌ์šด ๋ฌธ์ œ๋ถ€ํ„ฐ ํ•ด๊ฒฐํ•œ๋‹ค -> ์žฌ๊ท€์œผ ๊ธฐ์ดˆ

โžฐ ์žฌ๊ท€์˜ ๊ธฐ์ดˆ๋Š” ๋‚˜์ค‘์— ์žฌ๊ท€์˜ ํƒˆ์ถœ ์กฐ๊ฑด์„ ๊ตฌ์„ฑํ•œ๋‹ค.

 

4๏ธโƒฃ ๋ณต์žกํ•œ ๋ฌธ์ œ ํ•ด๊ฒฐํ•˜๊ธฐ

โžฐ ๋‚จ์•„์žˆ๋Š” ๋ณต์žกํ•œ ๊ฒฝ์šฐ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.

 

5๏ธโƒฃ ์ฝ”๋“œ ๊ตฌํ˜„ํ•˜๊ธฐ

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

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

 

๐Ÿ“ฃ  ์˜ˆ์‹œ

โœ”๏ธ ์ž์—ฐ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›๊ณ , ์ž…๋ ฅ๋ฐ›์€ ์ˆ˜๋ถ€ํ„ฐ 1๊นŒ์ง€์˜ ์ž์—ฐ์ˆ˜๋ฅผ ๋ชจ๋‘ ๊ณฑํ•œ ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋Š” ์žฌ๊ท€ ํ•จ์ˆ˜

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