π₯ μ¬κ·μ μ€ν
μ¬κ·: μ£Όμ΄μ§ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ νλμ ν¨μμμ μμ μ λ€μ νΈμΆνμ¬ μμ
μ μννλ λ°©μμ΄λ€
. μ΄λ€ 루ν΄μ΄λ νλ¬μμ κ° μκΈ° μμ μ λ°λ³΅μ μΌλ‘ νΈμΆνμ¬ λ¬Έμ λ₯Ό νμ΄λκ°λ μκ³ λ¦¬μ¦μ΄λ€.
ν¨μλ₯Ό μ μν λ, μκΈ° μμ μ λ€μ μ°Έμ‘°ν΄ νΈμΆνλ μκ³ λ¦¬μ¦μ λ§νλ€.
μλ₯Ό λ€μ΄, ν©ν λ¦¬μΌ ν¨μλ₯Ό μ¬κ· ν¨μλ‘ κ΅¬νν μ μλ€.
//
function factorial(num) {
if (num === 0) {
return 1;
} else {
return num * factorial(num - 1);
}
}
console.log(factorial(5)); // Output: 120
}
μ΄ μμ μμ factorial ν¨μλ μκΈ° μμ μ νΈμΆνμ¬ ν©ν 리μΌμ κ³μ°νλ€. νΈμΆ μ€νμλ κ° νΈμΆμ μνκ° μ μ₯λλλ°, μ΄λ νΈμΆλ ν¨μλ λμ€μ λ°νλ κ°μ΄ μ μ₯λ ν μ€νμμ μ κ±°λλ€.
π₯ μ€ν (Call Stack)
ν¨μ νΈμΆμ μ€ν 컨ν μ€νΈλ₯Ό μΆμ νλ λ°μ΄ν° ꡬ쑰μ΄λ€.
μλ°μ€ν¬λ¦½νΈλ ν¨μ νΈμΆμ κ΄λ¦¬νκΈ° μν΄ νΈμΆ μ€ν(call stack)μ μ¬μ©νλ€. ν¨μκ° νΈμΆλλ©΄ ν΄λΉ ν¨μμ μνλ μ€νμ 맨 μμ μΆκ°λκ³ , ν¨μκ° λ°νλλ©΄ ν΄λΉ μνλ μ€νμμ μ κ±°λλ€. μ΄λ¬ν νλ‘μΈμ€λ μ¬κ· ν¨μ νΈμΆμλ μ μ©λλ€.
μλ₯Ό λ€μ΄, factorial(5)λ₯Ό νΈμΆνλ©΄ λ€μκ³Ό κ°μ μ€νμ΄ νμ±λλ€.
factorial(5)
factorial(4)
factorial(3)
factorial(2)
factorial(1)
factorial(0)
μ€νμ΄ μ΅λ κΉμ΄μ λλ¬νλ©΄ Maximum call stack size exceededμ κ°μ μλ¬κ° λ°μν μ μμΌλ―λ‘ μ£Όμν΄μΌ νλ€.
=>μ¬κ· ν¨μλ₯Ό μ¬μ©ν λλ νΈμΆ μ€νμ κ³ λ €νμ¬ μ€ν μ€λ²νλ‘μ° μλ¬κ° λ°μνμ§ μλλ‘ μ£Όμν΄μΌ νλ€.
π₯ λ°λ³΅λ¬Έ VS μ¬κ· ν¨μ
λ°λ³΅λ¬Έ | μ¬κ· ν¨μ | |
---|---|---|
μ μ | λͺ λ Ήμ λ°λ³΅μ μΌλ‘ μ€ν | ν¨μλ₯Ό λ€μ νΈμΆνμ¬ λ°λ³΅μμ μν |
μ€ν λ©λͺ¨λ¦¬ | μ€ν λ©λͺ¨λ¦¬λ₯Ό μ¬μ©νμ§ μμ | ν¨μ νΈμΆ μ ν¨μμ λ§€κ°λ³μ, μ§μλ³μ, 리ν΄κ°, |
ν¨μ μ’ λ£ ν λμκ°λ μμΉκ° μ€νλ©λͺ¨λ¦¬μ μ μ₯ | ||
무ν λ°λ³΅μ | 무ν 루νλ CPU μ¬μ΄ν΄μ λ°λ³΅μ μΌλ‘ μ¬μ© | 무ν μ¬κ·λ μ€ν μ€λ²νλ‘μ° λ°μ |
μλ | λΉ λ₯Έ μ€ν | λλ¦° μ€ν |
π₯ μ¬κ· ν¨μλ₯Ό μ°λ μ΄μ
- λ³μ μ¬μ©μ μ€μΌ μ μλ€.
-> λ³μ μ¬μ©μ΄ μ€μ΄λ λ€λ λ»μ νλ‘κ·Έλ¨μ μ€λ₯κ° μκΈΈ κ°λ₯μ±μ΄ μ€μ΄λ€κ³ , νλ‘κ·Έλ¨μ΄ μ μμ μΌλ‘ λμκ°λμ§μ λν μ¦λͺ μ΄ μ¬μμ§λ€λ λ»μ΄λ€.
- μκ³ λ¦¬μ¦ μμ²΄κ° μ¬κ·μ μΈ ννμ΄ μμ°μ€λ¬μ΄ κ²½μ° (+ κ°λ μ±)
-> μ¬κ· ν¨μμ κ²½μ° λμ± μ§κ΄μ μ
'Elice > Study' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[JavaScript] λ²λΈλ§κ³Ό μΊ‘μ²λ§ (0) | 2024.03.21 |
---|---|
[JavaScript] Script νκ·Έμ defer, async (0) | 2024.03.21 |
[JavaScript] DOM (0) | 2024.03.21 |
[JavaScript] this (μ μ , λμ λ°μΈλ©) (0) | 2024.03.21 |
[JavaScript] λμ€νΈλμ²λ§ ν λΉ (0) | 2024.03.21 |