CHAPTER 01 μ¬κ· νΈμΆμ μ΄ν΄
1.1 μ¬κ· μ κ·Ό λ°©λ²μ΄λ?
μ¬κ·ν¨μ : μκΈ° μμ μ νΈμΆνλ ν¨μ -> μ΄ κ³Όμ μ΄ μ¬κ·
μΌλ°μ μΌλ‘ μ¬κ·μμλ ν¨μμμ μ 체 μμ μ μΌλΆλΆμ μννκ³ , λλ¨Έμ§ μμ μ κ°μ ν¨μλ₯Ό μ¬κ·μ μΌλ‘ νΈμΆνλ λ°©μμΌλ‘ μ 체 μμ μ΄ μνλλ€. μ’ λ£ μ‘°κ±΄μ λλ¬ν λκΉμ§ μ¬κ· νΈμΆμ΄ λ°λ³΅λλ€.
μ¬κ· ν¨μλ₯Ό μ¬μ©ν λ μ£Όμν μ
- μ¬κ·μλ νμ
μ’ λ£ μ‘°κ±΄
μ΄ μμ΄μΌ νλ€. (μμΌλ©΄ 무ν λ°λ³΅μ΄ λ°μνλ―λ‘) - μ¬κ· ν¨μλ μ 체 μμ μ μΌλΆλ§ μννκ³ λλ¨Έμ§λ μ¬κ· νΈμΆμ μμνλ€.
μ¬μ΄ μ½λμ 볡μ‘ν μ½λ μ€μ μ νν΄μΌ νλ€λ©΄, μ±λ₯μ΄λ λ©λͺ¨λ¦¬μ μ΄μ μ΄ μμ§ μμ ν μ¬μ΄ μ½λκ° μ’λ€.
factorial ν¨μλ₯Ό μ¬κ·/λΉμ¬κ· ν¨μλ‘ κ΅¬νν΄λ³΄κΈ°
def recursiveFactorial(n) :
if n <= 1 :
return n
else :
return recursiveFactorial(n-1) * n
def iterativeFactorial(n) :
num = 1
for i in range (2, n+1) :
num *= i
return num
ν¨μλ₯Ό μμ±ν λμ μ£Όμμ¬ν
- ν¨μλ
λͺ©μ μ§ν₯μ
μ΄μ΄μΌ νλ€. μ΄λ€ μΈμμ λν΄ ν¨μλ μλν λλ‘ λμν΄μΌ νλ€. - ν¨μκ° μνλλ λ° νμν μκ°μ 짧μ μλ‘ μ’λ€.
- ν¨μκ° μ¬μ©νλ λ©λͺ¨λ¦¬μ ν¬κΈ°λ μμ μλ‘ μ’λ€.
- ν¨μλ μ΄ν΄νκΈ° μ¬μμΌ νλ€. μ£Όμμ΄ μλλΌλ μ΄ν΄ν μ μμ΄μΌ μ΄μμ μΈ μ½λλΌ ν μ μλ€.
μ ν μ¬κ·μ νν μ¬κ·
μΌλ°μ μΌλ‘ μ¬κ· ν¨μλ μμ μ μννλ λΆλΆκ³Ό μμ μ μ¬κ· νΈμΆνλ λΆλΆμΌλ‘ ꡬμ±λμ΄ μλ€.
- μ ν μ¬κ·(head recursion) : ν¨μκ° μμ μ μννκΈ° μ μ μ¬κ· νΈμΆνλ κ²½μ°
- νν μ¬κ·(tail recursion) : λ§μ§λ§μ μ¬κ· νΈμΆνλ κ²½μ°
νν μ¬κ·λ 루νλ₯Ό μ¬μ©νλ ννλ‘ λ°κΎΈκΈ° μ½λ€. κ·Έλ¬λ―λ‘ νν μ¬κ·λ₯Ό μ¬μ©νμ¬ μ½λλ₯Ό μμ±ν λ€μμ 루νλ₯Ό μ¬μ©ν μ μλμ§ κ²ν νκ³ κ°λ₯νλ©΄ λ°κΎΈλ κ²μ΄ μ’λ€.
μ¬κ·λ₯Ό μ¬μ©ν λ¬Έμ ν΄κ²°
λ²λΈ μ λ ¬
λ²λΈ μ λ ¬μμ nκ°μ μμλ₯Ό μ λ ¬νλ κ²κ³Ό κ·Έ λ€μ n-1κ° μμλ₯Ό μ λ ¬νλ κ²μ μΈμλ§ λ€λ₯Ό λΏ, κ°μ λ¬Έμ λ€. κ·Έλ¬λ―λ‘ μ΄ λ¬Έμ λ₯Ό μ¬κ· ν¨μλ‘ ν΄κ²°νκΈ° μν μ μ κ³Όμ μ μ 리νλ©΄ μλμ κ°λ€.
- ν¨μκ° μνν΄μΌ νλ μμ : 1ν νμμ ν΅ν΄ κ°μ₯ ν° μμλ₯Ό μ μΌ λ€λ‘ 보λΈλ€.
- ν° λ¬Έμ λ₯Ό κ°μ μ νμ μμ λ¬Έμ λ‘ μ μνκΈ° : nκ° μμμ μ λ ¬ = 1ν νμ + n-1κ° μμμ μ λ ¬
- μ’ λ£ μ‘°κ±΄ : νμ λμμ λ°°μ΄μ ν¬κΈ° <= 1
def bubbleSort(arr, n) :
if (n <= 1) :
return ;
for i in range(0,n-1) :
if arr[i] > arr[i+1] : # swap
temp = arr[i]
arr[i] = arr[i+1]
arr[i+1] = temp
bubbleSort(arr, n-1)
arr = [9, 6, 2, 12, 11, 9, 3, 7]
bubbleSort(arr, 8)
print(arr)
μ°μ΅. μ«μ nμ ꡬꡬλ¨μ μΆλ ₯ν΄λ³΄μ
def printTable(n, i = 9) :
if (i > 1) :
printTable(n, i-1)
return print(f'{n} * {i} = {n * i}')
printTable(5)
# 5 * 1 = 5
# 5 * 2 = 10
# 5 * 3 = 15
# 5 * 4 = 20
# 5 * 5 = 25
# 5 * 6 = 30
# 5 * 7 = 35
# 5 * 8 = 40
# 5 * 9 = 45
1.2 μ¬κ· νΈμΆκ³Ό λ§λ¬΄λ¦¬
νλ‘μΈμ€ μ£Όμ 곡κ°
νλ‘μΈμ€ μ£Όμ κ³΅κ° (process address space) : νλ‘μΈμ€κ° μ°¨μ§ν λ©λͺ¨λ¦¬μ μμμΌλ‘ μ΄μ체μ κ° ν λΉνλ€.
μ½λ | μ»΄νμΌλ κΈ°κ³μ΄ μ½λκ° μ μ₯λλ μμ, μ½κΈ° μ μ©μΌλ‘ μ€νλλ λμ λ³κ²½ν μ μλ€. νλ‘κ·Έλ¨μ΄ λ©λͺ¨λ¦¬μ μ¬λΌκ° λ μ ν΄μ§λ€. |
---|---|
λ°μ΄ν° | λͺ¨λ μ μλ³μμ μ μ λ³μκ° μ΄ μμμ 곡κ°μ ν λΉλ°μΌλ©°, main ν¨μ νΈμΆ μ μ λ©λͺ¨λ¦¬κ° ν λΉλλ€. |
ν β¬οΈ β¬οΈ μ€ν |
λμ μΌλ‘ ν λΉλλ λ©λͺ¨λ¦¬λ‘ μ΄ λ©λͺ¨λ¦¬μ μ£Όμλ₯Ό μμ΄λ²λ¦¬λ©΄ λ©λͺ¨λ¦¬ λμκ° λ°μνλ€. ν¨μμ νμ± λ μ½λ |
κΈ°ν | λͺ λ Ήν μΈμ, νκ²½ λ³μ λ± |
λ©λͺ¨λ¦¬ λ°°μΉλ₯Ό μμ.
νλ‘κ·Έλ¨ μ€νμ μλͺ μ£ΌκΈ°μ νλ‘κ·Έλ¨μ΄ λ©λͺ¨λ¦¬μ μ΄λ»κ² λ‘λλλμ§λ₯Ό λͺ νν μ΄ν΄νλ©΄ μ¬λ¬ λ¬Έμ λ₯Ό νΈλ λ° λμμ΄ λλ€.
static int x = strlen('hello');
μ μ½λλ μ»΄νμΌν λ μλ¬κ° λ°μνλ€. μ? μ μ λ³μλ λ‘λνμμ μ΄κΈ°νλλλ° ν¨μλ λ‘λνμμ νΈμΆν μ μκΈ° λλ¬Έμ΄λ€. λ°λΌμ μλμ κ°μ΄ μ½λλ₯Ό μμ ν΄μΌ νλ€.
static int x;
x = strlen('hello');
λ‘λνμ λ³μλ ν¨μμ λ°νκ°μ΄λ μ§μ λ³μλ‘ μ΄κΈ°νν μ μλ€.