๊ธ€ ์ž‘์„ฑ์ž: ์ด์ง€์›๐ŸŒฉ๏ธ

์žฌ๊ท€ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Recursive algorithms) - ๊ธฐ์ดˆ

  • ์žฌ๊ท€ ํ•จ์ˆ˜๋ž€?
    • ํ•˜๋‚˜์˜ ํ•จ์ˆ˜์—์„œ ์ž์‹ ์„ ๋‹ค์‹œ ํ˜ธ์ถœํ•˜์—ฌ ์ž‘์—…์„ ์ˆ˜ํ–‰
    • ๋งŽ์€ ์ข…๋ฅ˜์˜ ๋ฌธ์ œ๊ฐ€ ์žฌ๊ท€์ ์œผ๋กœ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ
      • ์ด์ง„ ํŠธ๋ฆฌ(Binary trees)
      • ์ž์—ฐ์ˆ˜์˜ ํ•ฉ ๊ตฌํ•˜๊ธฐ
    • ์ข…๊ฒฐ ์กฐ๊ฑด(trivial case)์ด ๋งค์šฐ ์ค‘์š”ํ•จ
  • ์žฌ๊ท€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํšจ์œจ
    • ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋ณต์žก๋„ ์ธก๋ฉด๊ณผ ํšจ์œจ์„ฑ ์ธก๋ฉด

 

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

ํ”ผ๋ณด๋‚˜์น˜ ์ˆœ์—ด ์žฌ๊ท€์  ๋ฐฉ๋ฒ•

def fibonacci(x):
    if x == 0:
        return 0
    elif x == 1:
        return 1
    else:
        return fibonacci(x-1) + fibonacci(x-2)

๋ฌธ์ œ ์„ค๋ช…์—์„œ ํ”ผ๋ณด๋‚˜์น˜ ์ˆœ์—ด์— ๋Œ€ํ•œ ์ •์˜๊ฐ€ ์ฃผ์–ด์กŒ๊ณ , ์—ฌ๋Ÿฌ ๋ฒˆ ์ž‘์„ฑํ•ด๋ณธ ์ ์ด ์žˆ๋Š” ์ฝ”๋“œ๋ผ์„œ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ํฐ ์–ด๋ ค์›€์„ ๋Š๋ผ์ง€ ์•Š์•˜๋‹ค. ๊ทธ๋ž˜๋„ ์—ฌ๋Ÿฌ ๋ฒˆ์˜ ์ฝ”๋“œ ๋ฐ˜๋ณต ์ž‘์„ฑ๊ณผ ์†์œผ๋กœ ๋””๋ฒ„๊น…ํ•˜๋Š” ๊ฑธ ๋งŽ์ด ์—ฐ์Šตํ•ด์•ผ ํ•  ๊ฑฐ ๊ฐ™๋‹ค.

line2 ~ line5๋Š” ๋” ์งง๊ฒŒ ๊ณ ์น  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฑธ ์•Œ์•˜๋‹ค.

if n <= 1:
    return n

 

ํ”ผ๋ณด๋‚˜์น˜ ์ˆœ์—ด ๋ฐ˜๋ณต์ (iterative) ๋ฐฉ๋ฒ•

def solution(x):
    if x == 0:
        return 0
    elif x == 1:
        return 1
    else:
        F0 = 0
        F1 = 1
        idx = 2

        while idx <= x:
            Fn = F0 + F1
            F0, F1 = F1, Fn
            idx += 1
        answer = Fn
        return answer

์˜จ์ „ํžˆ ์Šค์Šค๋กœ ํ’€์—ˆ๋‹ค๊ณ  ํ•˜๊ธฐ์—๋Š” ๋ฌด๋ฆฌ๊ฐ€ ์žˆ๊ณ , ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ฝ”๋“œ๋ฅผ ์ฐธ์กฐํ–ˆ๋‹ค.

 

์žฌ๊ท€ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Recursive algorithms) - ์‘์šฉ

  • ์กฐํ•ฉ์˜ ์ˆ˜ ๊ณ„์‚ฐ
    • ํšจ์œจ์„ฑ ์ธก๋ฉด ์ƒ๊ฐํ•˜๊ธฐ
  • ์žฌ๊ท€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์œ ์šฉ์„ฑ
    • ํ•˜๋…ธ์ด์˜ ํƒ‘
  • ์žฌ๊ท€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํšจ์œจ
    • ํ”ผ๋ณด๋‚˜์น˜ ์ˆœ์—ด์˜ ๊ฒฝ์šฐ ๋ถˆํ•„์š”ํ•œ ํ•จ์ˆ˜ ํ˜ธ์ถœ๋กœ ์ธํ•œ ์„ฑ๋Šฅ ์ €ํ•˜ ๋ฐœ์ƒ

์žฌ๊ท€์  ์ด์ง„ ํƒ์ƒ‰

์ฒ˜์Œ์— ์ œ์ถœํ–ˆ๋˜ ๋‹ต์€ ํšจ์œจ์„ฑ ํ…Œ์ŠคํŠธ์—์„œ ํ‹€๋ ธ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜์™€ ๋˜‘๊ฐ™์ด ํ‹€๋ฆฐ ์‚ฌ๋žŒ์˜ ์งˆ๋ฌธ ๊ธ€์—์„œ ๋‹ต๋ณ€์„ ๋ณด๊ณ  ์ฝ”๋“œ๋ฅผ ๊ณ ์ณค๋‹ค. ๋‚ด๊ฐ€ ํ‹€๋ฆฐ ๋ถ€๋ถ„์€ ๋ฆฌ์ŠคํŠธ์— ์ฐพ๋Š” ๊ฐ’์ด ์—†์„ ๋•Œ -1์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ถ€๋ถ„์ด์—ˆ๋‹ค. ๋‚˜๋Š” ๋‹จ์ˆœํžˆ lower์™€ upper๊ฐ€ ๊ฐ™์„ ๋•Œ๋งŒ์„ ํ™•์ธํ–ˆ๋Š”๋ฐ ์ด๋ ‡๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์„œ ์‹คํ–‰ํ•  ๋•Œ๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์งˆ๋ฌธ ๊ธ€์˜ ๋‹ต๋ณ€์„ ๋ณด๊ณ  ์ƒˆ๋กœ์šด ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋”๋‹ˆ ๋ฆฌ์ŠคํŠธ์˜ ์ • ๊ฐ€์šด๋ฐ์— ์œ„์น˜ํ–ˆ์„ ๋•Œ (lower == upper) ์ฐพ๋Š” ๊ฐ’์ด ์žˆ์–ด๋„ -1์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฑธ ํ™•์ธํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์กฐ๊ฑด๋ฌธ์— and L[l] != x ๋ฅผ ์ถ”๊ฐ€ํ•จ์œผ๋กœ์จ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

-

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์–ด์„œ์™€! ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ฒ˜์Œ์ด์ง€? - ํŒŒํŠธ4, 5 ์ˆ˜์—…๋…ธํŠธ

๋ฐ˜์‘ํ˜•