μž¬κ·€ ν•¨μˆ˜ : μžμ‹ μ„ ν˜ΈμΆœν•˜λŠ” μ‹ κΈ°ν•œ ν•¨μˆ˜

μž¬κ·€(recursion)ν•¨μˆ˜λž€ 호좜된 ν•¨μˆ˜κ°€ 자기 μžμ‹ μ„ λ‹€μ‹œ ν˜ΈμΆœν•˜λŠ” 것

μ»€λ‹€λž€ 문제λ₯Ό μͺΌκ°œ λΆ€λ¬Έ 문제둜 λ§Œλ“€μ–΄ ν•΄κ²°ν•¨μœΌλ‘œμ¨ 전체 문제λ₯Ό ν’€μ–΄ λ‚˜κ°€λŠ” ꡬ쑰λ₯Ό 섀계할 λ•Œ λ°˜λ“œμ‹œ ν•„μš”

  • ε†λ‹€μ‹œ, λ‘λ²ˆ
  • ζ­ΈλŒμ•„μ˜€λ‹€, λŒμ•„κ°€λ‹€, λ§ˆμΉ˜λ‹€

μž¬κ·€ν•¨μˆ˜λ‘œ νŒ©ν† λ¦¬μ–Ό κ΅¬ν˜„ν•˜κΈ°

μˆ˜ν•™μ—μ„œ μ–΄λ–€ 수 n의 νŒ©ν† λ¦¬μ–Ό(factorial)은 1λΆ€ν„° nκΉŒμ§€ 곱을 의미, n! 이라고 ν‘œκΈ° (0! 은 1)

\[4! = 1 \times 2 \times 3 \times 4\] \[4! = 3! \times 4\] \[n! = (n-1)! \times n\]
def factorial(n):
    if n <= 0: #1 μž¬κ·€ ν•¨μˆ˜κ°€ 더 이상 ν˜ΈμΆœλ˜μ§€ μ•Šλ„λ‘ ν•˜λŠ” 'νŠΉμ • 쑰건'
        return 1
    return factorial(n-1)*n


if __name__ == "__main__":
    factorial(6)

μŠ€νƒ ν”„λ ˆμž„μœΌλ‘œ μž¬κ·€ ν•¨μˆ˜ μ΄ν•΄ν•˜κΈ°

  • μŠ€νƒ ν”„λ ˆμž„
    • ν•¨μˆ˜ 호좜 μ‹œ λ©”λͺ¨λ¦¬μ— μƒκΈ°λŠ” 곡간
    • ν•¨μˆ˜ 싀행에 ν•„μš”ν•œ 지역 λ³€μˆ˜λ“€μ΄ 할당됨
    • ν•¨μˆ˜λ₯Ό 호좜 ν–ˆμ„ λ•Œ 생성, ν•¨μˆ˜ 싀행이 μ’…λ£Œ λ˜μ—ˆμ„ λ•Œ μ†Œλ©Έ
  • μƒνƒœ 정보λ₯Ό 가지고 μžˆλŠ” 지역 λ³€μˆ˜λŠ” μ„œλ‘œ λ‹€λ₯Έ μŠ€νƒ ν”„λ ˆμž„μ— μ €μž₯
  • ν•¨μˆ˜ λ‚΄μ—μ„œ 자기 μžμ‹ μ„ ν˜ΈμΆœν•΄λ„ 같은 κΈ°λŠ₯의 μ½”λ“œλ₯Ό μ‹€ν–‰, μ‹€ν–‰ κ²°κ³ΌλŠ” μ„œλ‘œ λ‹€λ₯Έ μŠ€νƒ ν”„λ ˆμž„μ— μžˆλŠ” 지역 λ³€μˆ˜μ— μ €μž₯

μž¬κ·€ 트리

  • ν˜•νƒœλŠ” λΉ„μŠ·ν•˜μ§€λ§Œ 크기가 λ‹€λ₯Έ μ—¬λŸ¬ μž‘μ€ 문제둜 λ‚˜λˆˆ ν›„ 닡을 κ΅¬ν•˜κ³  κ·Έ 닡을 ν•©μΉ¨

μž¬κ·€ ν•¨μˆ˜ κ΅¬ν˜„

  1. μ–Έμ œ μ–΄λ–€ 맀개 λ³€μˆ˜λ₯Ό 가지고 ν˜ΈμΆœν• μ§€ μ •ν•΄μ•Ό 함
  2. ν˜ΈμΆœμ„ μ •μ§€μ‹œμΌœ 쀄 κΈ°μ € 사둀(base case)κ°€ ν•„μš”
  3. μž¬κ·€ ν•¨μˆ˜λ₯Ό 잘 ν™œμš©ν•˜λ©΄ λ³΅μž‘ν•œ μ•Œκ³ λ¦¬μ¦˜μ„ κ°„κ²°ν•˜κ²Œ μž‘μ„± κ°€λŠ₯
  4. λͺ¨λ“  μž¬κ·€ ν•¨μˆ˜λŠ” 반볡문으둜 κ΅¬ν˜„ κ°€λŠ₯
  5. μž¬κ·€ ν•¨μˆ˜κ°€ 반볡문 보닀 μœ λ¦¬ν•œ κ²½μš°κ°€ 있고 λΆˆλ¦¬ν•œ κ²½μš°κ°€ 있음
  6. 컴퓨터가 ν•¨μˆ˜λ₯Ό μ—°μ†μ μœΌλ‘œ ν˜ΈμΆœν•˜λ©΄ 컴퓨터 λ©”λͺ¨λ¦¬ λ‚΄λΆ€μ˜ μŠ€νƒ ν”„λ ˆμž„μ— μŒ“μΈλ‹€
    • κ·Έλž˜μ„œ μŠ€νƒμ„ μ‚¬μš©ν•΄μ•Ό ν•  λ•Œ κ΅¬ν˜„μƒ μŠ€νƒ 라이브러리 λŒ€μ‹ μ— μž¬κ·€ ν•¨μˆ˜λ₯Ό μ΄μš©ν•˜λŠ” κ²½μš°κ°€ λ§Žλ‹€