Tech/Data Structure & Algorithm

πŸ“š μž¬κ·€ν•¨μˆ˜

λ°€μ§„ 2022. 11. 9. 20:25

πŸ“Œ μž¬κ·€ν•¨μˆ˜λž€?

μž¬κ·€ν•¨μˆ˜λž€, μ–΄λ–€ ν•¨μˆ˜μ—μ„œ μžμ‹ μ„ λ‹€μ‹œ ν˜ΈμΆœν•˜μ—¬ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” λ°©μ‹μ˜ ν•¨μˆ˜λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.
λ‹€λ₯Έ λ§λ‘œλŠ” μž¬κ·€ν˜ΈμΆœ, λ˜λΆ€λ¦„μ΄λΌκ³  뢀리기도 ν•˜λ©°, μž¬κ·€ ν•¨μˆ˜λ₯Ό μž‘μ„±ν•  λ–„λŠ” ν•¨μˆ˜ λ‚΄μ—μ„œ λ‹€μ‹œ μžμ‹ μ„ ν˜ΈμΆœν•œ ν›„ κ·Έ ν•¨μˆ˜κ°€ 끝날 λ•ŒκΉŒμ§€ ν•¨μˆ˜ 호좜 μ΄ν›„μ˜ λͺ…령문이 μˆ˜ν–‰λ˜μ§€ μ•ŠλŠ”λ‹€λŠ” 사싀과 μ’…λ£Œ 쑰건이 κΌ­ ν¬ν•¨λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

μž¬κ·€ν•¨μˆ˜ 원리

πŸ“Œ μ˜ˆμ‹œλ¬Έμ œ

# data = [3, 5, 8] μ„±λΆ„λ“€μ˜ ν•©μœΌλ‘œ ν‘œν˜„ν•  수 μžˆλŠ” 숫자의 경우의 μˆ˜λŠ”?
# λ°˜λ³΅λ¬Έμ„ ν™œμš©ν•œ μ™„μ „ 탐색
data = [3, 5, 8]
result = set()
for i in range(2):
    for j in range(2):
        for k in range(2):
            result.add(data[0] * i + data[1] * j + data[2] * k)

print(result)
# (0, 3, 5, 8, 11, 13, 16)
# 데이터가 λ§Žμ•„μ§€λ©΄ 어렡기에 μž¬κ·€ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•¨
data = [3, 5, 8]
def recur(index,value):
    if index == len(data):
        result.add(value)
    else:
        recur(index + 1, value + data[index])
        recur(index + 1, value)
result = set()
recur(0,0)
print(result)
#(0, 3, 5, 8, 11, 13, 16)
#λ°°μ—΄μ˜ 길이가 κΈΈμ–΄μ§„λ‹€ ν•˜λ”λΌλ„ μˆ˜μ •μ—†μ΄ λ¬Έμ œν•΄κ²° κ°€λŠ₯

πŸ“Œ μž¬κ·€ν•¨μˆ˜ ν™œμš©

  1. νŽ™ν† λ¦¬μ–Ό(!)
    def factorial(n):
     if n == 1:
         return 1
     else:
         return n * factorial(n-1)
  2. ν”Όλ³΄λ‚˜μΉ˜ μˆ˜μ—΄
    def fibonacci(n):
     if n == 0 or n == 1:
         return 1
     else:
         return fibonacci(n-1) + fibonacci(n-2)
    πŸ“Œ μž¬κ·€ν•¨μˆ˜ 깊이

μž¬κ·€ν•¨μˆ˜ 깊이