Bibi's DevLog π€π
[Hello Coding μκ³ λ¦¬μ¦] 3μ₯. μ¬κ· λ³Έλ¬Έ
[Hello Coding μκ³ λ¦¬μ¦] 3μ₯. μ¬κ·
λΉλΉ bibi 2021. 6. 30. 22:243μ₯. μ¬κ·
μμνκΈ°μ μμ
- μμ μ½λ μ§μ μ€νν΄ λ³΄κΈ°
- μ μ΄λ ν λ²μ μ°νκ³Ό μ’ μ΄λ₯Ό κ°μ§κ³ μ¬κ·ν¨μμ μ€ν κ³Όμ μ λ°λΌκ° 보기.
- μμ¬μ½λ(pseudocode, μλμ½λ) : λ¬Έμ μ νμ΄ λ°©λ²μ κ°λ¨ν μ½λλ‘ μ€λͺ ν κ². μ€μ λ‘ λμνμ§ μμ
μ¬κ· recursion
- μ¬κ·
- ν¨μκ° μκΈ° μμ μ νΈμΆνλ κ².
λ¬Έμ : μ¬λ¬ κ²ΉμΌλ‘ ν¬μ₯λ μμλ€μ΄ μκ³ , κ·Έ μμκ° λ λ€λ₯Έ μμλ€ μμ λ€μ΄ μλ€. λͺ κ°μΌμ§ λͺ¨λ₯΄λ μμλ€ μ€ μ΄μ κ° λ€μ΄μλ μμλ₯Ό μ°ΎμμΌ νλ€.
λ°©λ² 1 : λ°λ³΅λ¬Έ μ¬μ©νκΈ°
- λ΄λΆλ₯Ό νμΈν μμλ₯Ό μμλλλ€(=μμ λλ―Έ).
- μμ νλλ₯Ό μ§μ΄μ λ΄λΆλ₯Ό νμΈνλ€.
- λ§μ½ μμ μμκ° μλ€λ©΄, νμΈν μμ λλ―Έμ λμ λ€ 2λ‘ λμκ°λ€.
- λ§μ½ μμ μ΄μ κ° μλ€λ©΄ μμ μ μ’ λ£νλ€.
μλλ μ κ³Όμ μ λν μλμ½λ.
def look_for_key(main_box):
pile = main_box.make_a_pile_to_look_through()
while pile is not empty:
box = pile.grab_a_box()
for item in box:
if item.is_a_box():
pile.append(item)
elif item.is_a_key():
print "μ΄μ λ₯Ό μ°Ύμμ΄μ!"
λ°©λ² 2 : μ¬κ· μ¬μ©νκΈ°
- μμ μμ νμΈνλ€.
- λ§μ½ μμλ₯Ό λ°κ²¬νλ©΄ 1.λ‘ κ°λ€.
- λ§μ½ μ΄μ λ₯Ό λ°κ²¬νλ©΄ μμ μ μ’ λ£νλ€.
μλλ μ κ³Όμ μ λν μλμ½λ.
def look_for_key(box):
for item in box:
if item.is_a_box():
look_for_key(item)
elif item.is_a_key():
print "μ΄μ λ₯Ό μ°Ύμμ΄μ!"
μ¬κ·μ νΉμ§
- μκ³ λ¦¬μ¦ νμ΄λ₯Ό λͺ
ννκ² ν΄ μ€λ€.
- μ±λ₯μ΄ λ λμμ§λ κ²μ μλ. μ±λ₯μ λ°λ³΅λ¬Έμ΄ λ μ’λ€.
- "νλ‘κ·Έλ¨μ λ°λ³΅λ¬Έμ μ¬μ©νλ©΄ νλ‘κ·Έλ¨μ μ±λ₯μ ν₯μμν¬ μ μμ§λ§, μ¬κ·λ₯Ό μ¬μ©νλ©΄ νλ‘κ·Έλλ¨Έμ λ₯λ ₯μ ν₯μμν¬ μ μμ΅λλ€. μν©μ λ°λΌ μ μ ν λ°©λ²μ κ³¨λΌ μ¬μ©νμΈμ."
- λλΆλΆμ μ€μν μκ³ λ¦¬μ¦λ€μ΄ μ¬κ·λ₯Ό μ¬μ©νλ€.
κΈ°λ³Έ λ¨κ³μ μ¬κ· λ¨κ³
μ¬κ·ν¨μλ μκΈ° μμ μ νΈμΆνκΈ° λλ¬Έμ 무ν루νμ λΉ μ§κΈ° μ½λ€.
μ¬κ·ν¨μλ₯Ό λ§λ€ λμλ μΈμ μ¬κ·λ₯Ό λ©μΆμ§ λ°λμ μλ € μ£Όμ΄μΌ νλ€.
κ·Έλμ λͺ¨λ μ¬κ·ν¨μλ κΈ°λ³Έ λ¨κ³μ μ¬κ· λ¨κ³λ‘ λλμ΄μ Έ μλ€.
- κΈ°λ³Έ λ¨κ³ base case : μ¬κ·λ₯Ό λΉ μ Έλκ°λ λ¨κ³. 무νλ°λ³΅μ λΉ μ§λ κ²μ λ§λ λΆλΆμ΄λ€.
- μ¬κ· λ¨κ³ recursive case : ν¨μκ° μκΈ° μμ μ νΈμΆνλ λ¨κ³.
μλλ μΉ΄μ΄νΈλ€μ΄μ νλ μ½λ. (무ν루ν)
def countdown(i):
print i
countdown(i-1)
무ν루ν μ½λμ κΈ°λ³Έ λ¨κ³λ₯Ό μΆκ°νλ©΄ μ μ λμνλ μ¬κ·ν¨μλ₯Ό λ§λ€ μ μλ€.
def countdown(i):
print i
if i <= 1: ## κΈ°λ³Έ λ¨κ³
return
else: ## μ¬κ· λ¨κ³
countdown(i-1)
μ€ν (μ½ μ€ν)
νΈμΆ μ€νμ νλ‘κ·Έλ¨μ μ€μ κ°λ μ΄λ€. μ¬κ·λ₯Ό μ¬μ©ν λλ λ μ€μνλ€.
μ€ν stack : νΈμ(push, μ½μ )μ ν(pop, λΉΌλ΄μ μ½κΈ°) λ λμλ§ κ°λ₯ν μλ£κ΅¬μ‘°.
- νΈμ : κ°μ₯ μμ μ νλͺ©μ μΆκ°
- ν : κ°μ₯ μμ νλͺ©μ λΉΌλ΄μ΄ μ½κΈ°
μ½ μ€ν (call stack, νΈμΆ μ€ν)
μ»΄ν¨ν°κ° ν¨μμ μ¬μ©λλ λ³μλ₯Ό μ μ₯νλ μ€νμ μ½ μ€νμ΄λΌκ³ νλ€.
ν¨μκ° ν λ² νΈμΆλ λ λ§λ€, μ»΄ν¨ν°λ κ·Έ ν¨μ νΈμΆμ νμν λ©λͺ¨λ¦¬λ₯Ό ν λΉν΄ μ€νμΌλ‘ μλλ€(push).
- ν¨μμ μ¬μ©λ λ³μλ ν΄λΉ ν¨μμ μ€ν λ΄μ μ μ₯λλ€.
- ν΄λΉ ν¨μκ° μ’
λ£(리ν΄)λκΈ° μ κΉμ§ κ·Έ μ€νμ μ μ§λλ€.
- ν΄λΉ ν¨μκ° μ’ λ£(리ν΄)λλ©΄ κ·Έ μ€νμ μ¬λΌμ§λ€(pop).
- ν¨μ(A) λ΄μμ λ€λ₯Έ ν¨μ(B)λ₯Ό νΈμΆνλ©΄, A μ€ν μμ B μ€νμ΄ μμΈλ€.
- ν¨μ νΈμΆ ν μ’ λ£λκΈ° μ μ΄λΌλ λ€λ₯Έ ν¨μλ₯Ό νΈμΆν μ μμΌλ©°, μ΄ λ μ€μ§λ ν¨μμ λ³μ κ°λ€μ ν΄λΉ μ€νμΌλ‘ λ©λͺ¨λ¦¬μ μ μ₯λλ€.
- 맨 μμ μμ¬ μλ μ€νμ΄ νμ¬ μ€νλκ³ μλ ν¨μμ λν μ€νμ΄λ€.
μ¬κ· ν¨μμμ μ½ μ€ν μ¬μ©
μ¬κ· ν¨μλ μ½ μ€νμ μ¬μ©νλ€.
μλλ ν©ν λ¦¬μΌ ν¨μμ λν μ¬κ·ν¨μ.
- μ½μ€ν λͺ¨μμ κΌ κ΅μ¬λ₯Ό νμΈνμ : 59~61νμ΄μ§.
def fact(x):
if x == 1:
return 1
else:
return x * fact(x-1)
μ¬κ· ν¨μμμ μ½ μ€νμ μν μ?
= λ°λ³΅λ¬Έμμ νμνλ μμ λλ―Έ(pile
)μ μν .
μ¬κ·λ₯Ό μ¬μ©ν΄ ꡬννλ©΄, νμΈν΄μΌ ν μμ λλ―Έλ₯Ό μ€νμ μ μ₯νλ κ²κ³Ό κ°λ€.
- μ°λ¦¬κ° μ§μ μμ λλ―Έλ₯Ό λ§λ€κ³ μΆμ νμ§ μμλ λκΈ° λλ¬Έμ νΈλ¦¬ν κ²!
μ½ μ€νμ λ¨μ
: λͺ¨λ μ 보λ₯Ό μ»΄ν¨ν° λ©λͺ¨λ¦¬μ μ μ₯ν΄μΌ νλ―λ‘ λ©λͺ¨λ¦¬λ₯Ό λ§μ΄ μλΉνλ€.
- ν¨μ νΈμΆμ ν λ² ν λλ§λ€ λ©λͺ¨λ¦¬λ₯Ό μ¬μ©νκ² λ¨.
- μ¬κ·κ° κΉμ΄μ Έ μ€νμ΄ μ»€μ§λ©΄, μ»΄ν¨ν°κ° κ³Όλ€ν ν¨μ νΈμΆμ 보λ₯Ό μ μ₯νκ² λ¨
- μ¬κ·κ° κΉμ΄μ§λ©΄(νΉν 무ν루νμ λΉ μ§λ©΄) μ€νμ΄ κ³μ 컀μ§λλ°, λͺ¨λ νλ‘κ·Έλ¨μ μ½μ€νμ ν λΉν μ μλ λ©λͺ¨λ¦¬ 곡κ°μ΄ μ ν΄μ Έ μμΌλ―λ‘ κ·Έ 곡κ°μ λ€ μ¬μ©νλ©΄ μ€ν μ€λ²νλ‘μ° μ€λ₯κ° λ°μνλ©° νλ‘κ·Έλ¨μ΄ μ’ λ£λλ€.
ν΄κ²° 1 : μ¬κ· λμ λ°λ³΅λ¬ΈμΌλ‘ μ ν
ν΄κ²° 2 : 꼬리μ¬κ· tail recursion λ°©λ²μ μ¬μ© - κ³ κΈ μ¬κ· λ°©λ².
'νλ‘κ·Έλλ° > Algorithm μκ³ λ¦¬μ¦' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift] κ·Έλνμ νμ μκ³ λ¦¬μ¦ DFS/BFS (μ€λͺ λ° κ΅¬ν μμ ) (0) | 2023.01.13 |
---|---|
[Hello Coding μκ³ λ¦¬μ¦] 4. ν΅ μ λ ¬ (0) | 2021.07.01 |
[Hello Coding μκ³ λ¦¬μ¦] 2μ₯. μ ν μ λ ¬ (0) | 2021.06.30 |
[Hello Coding μκ³ λ¦¬μ¦] 1μ₯. μκ³ λ¦¬μ¦μ μκ° (0) | 2021.06.28 |
νλ‘κ·Έλλ¨Έμ€ Lv1 - μμ°μ λ€μ§μ΄ λ°°μ΄λ‘ λ§λ€κΈ° (0) | 2021.06.24 |