DFS λ¬Έμ λ₯Ό νκΈ°μν΄ κΈ°λ³Έμ μΌλ‘ μ¬κ·ν¨μμ λν΄ μμμΌνλ€. μ΄λ²κΈ°νλ₯Ό ν΅ν΄ νλ² λ μ¬κ·ν¨μμ λν΄ μμλ³΄κ³ μ νλ€.
μ½λλ₯Ό ν΅ν΄ μμ보μ.
function callback(level){
if(level===0) return;
else{
callback(level-1);
console.log(level);
}
}
callback(3);
κΈ°λ³Έμ μΈ μ¬κ·ν¨μμ μλ₯Ό λ€κ³ μ보μλ€.
μ²μ callback(3)
κ° μ€νλλ©΄μ μ€νμ callback(3) μ΄λΌλ νλ μμ΄ μκΈ°κ²λλ€.
μ΄λ, callback(3) μ μ€νμμλ μ§μλ³μ,λ§€κ°λ³μ κ·Έλ¦¬κ³ λ³΅κ·μ£Όμκ° μλ€.(μ½κ² μ΄ν΄νκΈ°μν΄ κ°λ¨ν)
κ·ΈλΌ callback(3) μμ μλ μ½λλ₯Ό μ°¨λ‘λ‘ μ€ννκ² λλ€.
μΌλ¨ if λ¬Έμ κ·Έλλ‘ μ§λκ°κ² λκ³ , else λ¬ΈμΌλ‘ λΉ μ§κ² λλλ°, μ΄λ callback(3-1) μ΄ μ€νλλ©΄μ μ€νμ μΌμμ€μ§κ° λκ³ callback(3-1) μ νλ μμ΄ μΆκ°κ° λλ€.
μ κ³Όμ μ λ°λ³΅νμ¬, μλλΆν° callback(3),callback(2),callback(1),callback(0) μ΄ μμ΄κ² λλ€.
μ€νμ νμ μ μΆμ΄κΈ° λλ¬Έμ callback(0) λΆν° μ€νλλ©΄μ pop λλ€.
callback(0) μ if λ¬Έμ ν΅κ³Όνμ¬ κ·Έλ₯ 리ν΄λλ©΄μ μ’ λ£λ©λλ€. κ·Έ ν, 볡κ·μ£Όμλ‘ λ€μ 볡κ·λ₯Ό νκ³ popλ©λλ€.
μ΄λ μ£Όν©μμΌλ‘ νκ΄ν μΉ ν΄μ Έμλ μμΉλ‘ 볡κ·ν©λλ€.
callback(1) μ callback(0) μ μ€νμμΌ°κΈ°λλ¬Έμ λ€μ μ€λ‘ λμ΄κ°λλ€.
console.log κ° λμλλ©΄μ μΆλ ₯ν©λλ€.
μ’ λ£κ° λλ©΄μ λ³΅κ· μ£Όμλ‘ λ³΅κ·λ₯Ό νκ³ μ€νμμ pop λ©λλ€.
μμ κ°μ κ³Όμ μ κ±°μ³μ μ΅μ’ μ μΌλ‘
1
2
3
μ΄ μΆλ ₯λ©λλ€.