[Algorithm] Recursion

link717ยท2020๋…„ 12์›” 8์ผ
0

Algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
2/6
post-thumbnail
post-custom-banner

๐Ÿ˜ ์žฌ๊ท€(Recursion)

์žฌ๊ท€๋ž€, ์ž์‹ ์„ ์ •์˜ํ•  ๋•Œ ์ž์‹ ์„ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

  • ์žฌ๊ท€ ํ•จ์ˆ˜: ์žฌ๊ท€ ๊ฐœ๋…์„ ์‚ฌ์šฉํ•œ ์žฌ๊ท€ํ•จ์ˆ˜๋Š” ์ข…๋ฃŒ ์กฐ๊ฑด์— ์ถฉ์กฑํ•  ๋•Œ๊นŒ์ง€ ์ž๊ธฐ ์ž์‹ ์„ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. ์žฌ๊ท€ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋ฉด 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-์–„ํŒํ•œ ์ฝ”๋”ฉ์‚ฌ์ „

profile
Turtle Never stop
post-custom-banner

0๊ฐœ์˜ ๋Œ“๊ธ€