Recursion

์žฌ๊ท€ํ˜ธ์ถœ / ์ˆœํ™˜์ด๋ž€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‚˜ ํ•จ์ˆ˜๊ฐ€ ์ˆ˜ํ–‰๋„์ค‘ ์ž๊ธฐ ์ž์‹ ์„ ๋‹ค์‹œ ํ˜ธ์ถœํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค. ์ •์˜์ž์ฒด๊ฐ€ ์ˆœํ™˜์ ์œผ๋กœ ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ์— ์ ํ•ฉํ•˜๋‹ค.

์ž๊ธฐ ์ž์‹ ์„ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ํ˜„์žฌ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ฐ™์€ ์œ ํ˜•์˜ ํ•˜์œ„์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค. ๋ฌธ์ œ๋ฅผ ํ•œ๋ฒˆ์— ํ•ด๊ฒฐํ•˜๊ธฐ๋ณด๋‹ค๋Š” ๊ฐ™์€ ์œ ํ˜•์˜ ํ•˜์œ„์ž‘์—…์œผ๋กœ ๋ถ„ํ• ํ•˜์—ฌ ์ž‘์€ ๋ฌธ์ œ๋ถ€ํ„ฐ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์ˆœํ™˜ ํ•จ์ˆ˜์—์„œ ํƒˆ์ถœํ•  ์ˆ˜ ์žˆ๋Š” basecase๊ฐ€ ๋ฐ˜๋“œ์‹œ ํ•˜๋‚˜ ์ด์ƒ ์žˆ์–ด์•ผํ•œ๋‹ค.

์ˆœํ™˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ๋Š” ์ˆœํ™˜ ํ˜ธ์ถœ์„ ํ•˜๋Š” ๋ถ€๋ถ„(recursive case)๊ณผ ์ˆœํ™˜ ํ˜ธ์ถœ์„ ๋ฉˆ์ถ”๋Š” ๋ถ€๋ถ„(base case)์ด ์žˆ๋‹ค. ๋งŒ์•ฝ ๋ฉˆ์ถ”๋Š” ๋ถ€๋ถ„์ด ์—†๋‹ค๋ฉด ์‹œ์Šคํ…œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๊นŒ์ง€ ๋ฌดํ•œํžˆ ํ˜ธ์ถœํ•˜๊ฒŒ ๋œ๋‹ค.

๋ฉˆ์ถ”๋Š” ๋ถ€๋ถ„์ด ๋ฐ˜๋“œ์‹œ ์žˆ์–ด์•ผํ•œ๋‹ค. ์—†๋‹ค๋ฉด ์‹œ์Šคํ…œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ• ๋•Œ๊นŒ์ง€ ๋ฌดํ•œ ํ˜ธ์ถœ

์ˆœํ™˜๊ณผ ๋ฐ˜๋ณต

์ˆœํ™˜

๋ฐ˜๋ณต

์ˆœํ™˜ ํ˜ธ์ถœ ์ด์šฉ(์žฌ๊ท€ํ•จ์ˆ˜)

for ๋˜๋Š” while

๊ตฌํ˜„ ์†๋„๊ฐ€ ๋น ๋ฆ„

์ˆ˜ํ–‰ ์†๋„๊ฐ€ ๋น ๋ฆ„

์ˆœํ™˜์ ์ธ ๋ฌธ์ œ์—์„œ๋Š” ์ž์—ฐ์Šค๋Ÿฌ์šด ๋ฐฉ๋ฒ•์ด๋‚˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ์˜ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

์ˆœํ™˜์ ์ธ ๋ฌธ์ œ์— ๋Œ€ํ•ด์„œ๋Š” ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑ์ด ์•„์ฃผ ์–ด๋ ค์šธ ์ˆ˜๋„ ์žˆ๋‹ค.

  • ์‹คํ–‰์‹œ๊ฐ„ : ์ปดํ“จํ„ฐ๊ฐ€ ์‹คํ–‰ํ•˜๋Š” ์‹œ๊ฐ„

  • ๊ฐœ๋ฐœ์‹œ๊ฐ„ : ์ฝ”๋”ฉํ•˜๋Š” ์‹œ๊ฐ„

long int fact(int n){
  if(n<=1) return 1; // basecase
  else return(n*fact(n-1));
}
long int fact(int n){
  int i, res = 1;
  if(n<=1)return 1;
  else{
    for(i=n; i>=0;i--){
      res = res * i;
    }
    return res;
  }
}

๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ• ๋‹ค O(n) ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค. ์ˆœํ™˜ ํ˜ธ์ถœ์€ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์œผ๋‚˜ ์ˆ˜ํ–‰์‹œ๊ฐ„๊ณผ ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ์–ด์„œ๋Š” ๋น„ํšจ์œจ์ ์ธ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ ๊ฐ ๋ฌธ์ œ์˜ ๊ฒฝ์šฐ์— ๋งž๊ฒŒ ๋ฐ˜๋ณต๊ณผ ์ˆœํ™˜์„ ์„ ํƒํ•ด ํ’€์–ด์•ผํ•œ๋‹ค. ( Dynamic Programming์—์„œ ์ค‘์š” )

์‹ค์Šต

  • ์ˆœํ™˜

  • ๋ฐ˜๋ณต

๊ฑฐ๋“ญ์ œ๊ณฑ ๊ตฌํ•˜๊ธฐ(x^n)

์ˆซ์ž x์˜ n์ œ๊ณฑ ๊ฐ’์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ

  • ์ˆœํ™˜

์ด๋ ‡๊ฒŒ ํ•ด๋„ ๋˜๋‚˜ n์ด ์ง์ˆ˜์ธ ๊ฒฝ์šฐ์™€ ํ™€์ˆ˜์ธ ๊ฒฝ์šฐ๋ฅผ ๋‚˜๋ˆ ์„œ ๊ตฌํ•˜๋ฉด ์—ฐ์‚ฐ๋Ÿ‰์ด ๋” ์ค„์–ด๋“ ๋‹ค.

์—ฌ๊ธฐ์„œ k๋ฒˆ์˜ ์ˆœํ™˜ ํ˜ธ์ถœ์ด ์ผ์–ด๋‚œ๋‹ค. ํ•œ๋ฒˆ ์ˆœํ™˜ํ˜ธ์ถœ์ด ์ผ์–ด๋‚ ๋•Œ๋งˆ๋‹ค 1๋ฒˆ์˜ ๊ณฑ์…ˆ๊ณผ 1๋ฒˆ์˜ ๋‚˜๋ˆ—์…ˆ์ด ์ผ์–ด๋‚œ๋‹ค. ์ „์ฒด ์—ฐ์‚ฐ ์ˆ˜๋Š” k=log2(N)์— ๋น„๋ก€ํ•œ๋‹ค. ์ฆ‰, ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(log2(n))์ด๋‹ค.

  • ๋ฐ˜๋ณต

์—ฌ๊ธฐ์„œ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(n)์ด๋‹ค.

ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด

ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์€ ์ •์˜ ์ž์ฒด๋Š” ์ˆœํ™˜์ ์ด๋‚˜ ์ˆœํ™˜ ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋น„ํšจ์œจ์ ์ธ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ์ด๋‹ค.

  • ์ˆœํ™˜

์œ„์™€ ๊ฐ™์ด ๊ฐ™์€ ํ•ญ์ด ๊ณ„์†ํ•ด์„œ ์ค‘๋ณตํ•ด์„œ ๊ณ„์‚ฐ๋˜๋ฏ€๋กœ ๋น„ํšจ์œจ ์ ์ด๋‹ค.

  • ๋ฐ˜๋ณต

Tripple ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด

1, 2, 3, 6, 11, 20, 37, 68 ...

  • ์ˆœํ™˜

ํ•˜๋…ธ์ด ํƒ‘

๋ง‰๋Œ€ A์— ์žˆ๋Š” ์›ํŒ์„ ๋ง‰๋Œ€ C๋กœ ์˜ฎ๊ธฐ๋Š” ๋ฌธ์ œ์ด๋‹ค.

์กฐ๊ฑด

  1. ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์›ํŒ๋งŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.

  2. ๋งจ ์œ„์— ์žˆ๋Š” ์›ํŒ๋งŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.

  3. ํฌ๊ธฐ๊ฐ€ ์ž‘์€ ์›ํŒ ์œ„์— ํฐ ์›ํŒ์ด ์Œ“์ผ ์ˆ˜ ์—†๋‹ค.

  4. ์ค‘๊ฐ„์˜ ๋ง‰๋Œ€๋ฅผ ์ž„์‹œ์ ์œผ๋กœ ์ด์šฉํ•  ์ˆ˜ ์žˆ์œผ๋‚˜ ์•ž์˜ ์กฐ๊ฑด๋“ค์„ ์ง€์ผœ์•ผ ํ•œ๋‹ค.

1๋‹จ๊ณ„. ๋ง‰๋Œ€ A์—์„œ ์›๋ฐ˜(1~n-1)์„ ๋ง‰๋Œ€ C๋ฅผ ์ด์šฉํ•ด ๋ง‰๋Œ€ B๋กœ ์˜ฎ๊ธด๋‹ค. Hanoi(m-1,a,c,b)

2๋‹จ๊ณ„. ๋ง‰๋Œ€ A์—์„œ ์›๋ฐ˜(n)์„ ๋ง‰๋Œ€ C๋กœ ์˜ฎ๊ธด๋‹ค. if(m==1)

3๋‹จ๊ณ„. ๋ง‰๋Œ€ B์—์„œ ์›๋ฐ˜(1~n-1)์„ ๋ง‰๋Œ€ A๋ฅผ ์ด์šฉํ•ด ๋ง‰๋Œ€ C๋กœ ์˜ฎ๊ธด๋‹ค. Hanoi(m-1,b,a,c)

  • ์ˆœํ™˜

Ackermann ํ•จ์ˆ˜

์œ„ํ‚ค๋ฐฑ๊ณผ ์•„์ปค๋งŒ ํ•จ์ˆ˜์— ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์ด ์žˆ๋‹ค.

  • ์ˆœํ™˜

  • ๋ฐ˜๋ณต

basecase๊ฐ€ ์—†๋‹ค๋ฉด ์ˆœํ™˜์ด ์•„๋‹ˆ๋‹ค! ์ด๊ฒƒ์— ์ดˆ์ ์„ ๋‘๊ณ  ์ฝ”๋“œ๋ฅผ ์งœ๋ณด์•˜๋‹ค.

2์ฐจ์› ๋ฐฐ์—ด๋กœ ๊ตฌํ˜„ํ–ˆ์„ ๋•Œ๋Š” ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด ๊ณ„์†ํ•ด์„œ ๋ฒ”์œ„๋ฅผ ์ดˆ๊ณผํ•˜๋Š” ๋ฌธ์ œ๋ฐœ์ƒํ–ˆ๋‹ค.

๋˜ ๊ทœ์น™์„ ์ฐพ์•„์„œ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค.

์™„์ „ ํƒ์ƒ‰

์™„์ „ ํƒ์ƒ‰์€ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ฃผ์ € ์—†์ด ๋‹ค ๊ณ„์‚ฐํ•˜๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์˜๋ฏธํ•œ๋‹ค.

์žฌ๊ท€ ํ˜ธ์ถœ์€ ๊ฐ€๋Šฅํ•œ ๋ฐฉ๋ฒ•์„ ์ „๋ถ€ ๋งŒ๋“ค์–ด ๋ณด๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์™„์ „ ํƒ์ƒ‰(Exhaustive Search)์ด๋ผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์–ด๋–ค ๋ฌธ์ œ๋ฅผ ์™„์ „ ํƒ์ƒ‰์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•„์š”ํ•œ ๊ณผ์ •์€ ๋Œ€๋žต ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. 1. ์™„์ „ ํƒ์ƒ‰์€ ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ๋‹ต์„ ํ•˜๋‚˜์”ฉ ๊ฒ€์‚ฌํ•˜๋ฏ€๋กœ, ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์€ ๊ฐ€๋Šฅํ•œ ๋‹ต์˜ ์ˆ˜์— ์ •ํ™•ํžˆ ๋น„๋ก€ํ•œ๋‹ค. ์ตœ๋Œ€ ํฌ๊ธฐ์˜ ์ž…๋ ฅ์„ ๊ฐ€์ •ํ–ˆ์„ ๋•Œ ๋‹ต์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ , ์ด๋“ค์„ ๋ชจ๋‘ ์ œํ•œ ์‹œ๊ฐ„์•ˆ์— ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์„์ง€ ๊ฐ€๋Š ํ•ด๋ณด๊ณ  ์ ์šฉํ•ด์•ผํ•œ๋‹ค. 2. ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋‹ต์˜ ํ›„๋ณด๋ฅผ ๋งŒ๋“œ๋Š” ๊ณผ์ •์„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์„ ํƒ์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค. ๊ฐ๊ฐ์˜ ์„ ํƒ์€ ๋‹ต์˜ ํ›„๋ณด๋ฅผ ๋งŒ๋“œ๋Š” ๊ณผ์ •์˜ ํ•œ ์กฐ๊ฐ์ด๋‹ค. 3. ๊ทธ์ค‘ ํ•œ ์กฐ๊ฐ์„ ์„ ํƒํ•ด ๋‹ต์˜ ์ผ๋ถ€๋ฅผ ๋งŒ๋“ค๊ณ , ๋‚˜๋จธ์ง€ ๋‹ต์„ ์žฌ๊ท€ ํ˜ธ์ถœ์„ ํ†ตํ•ด ์™„์„ฑํ•œ๋‹ค. 4. ์กฐ๊ฐ์ด ํ•˜๋‚˜๋ฐ–์— ๋‚จ์ง€ ์•Š์€ ๊ฒฝ์šฐ, ํ˜น์€ ํ•˜๋‚˜๋„ ๋‚จ์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋Š” ๋‹ต์„ ์ƒ์„ฑํ–ˆ์œผ๋ฏ€๋กœ basecase๋กœ ์„ ํƒํ•ด ์ฒ˜๋ฆฌํ•œ๋‹ค.

๊ด€๋ จ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ๋ณด๋Ÿฌ๊ฐ€๊ธฐ

Last updated

Was this helpful?