μž¬κ·€ν•¨μˆ˜ (Recursive Function)


ν†΅κ³‘μ˜ λ²½

 

μ–΄λŠ ν•œ 컴퓨터곡학과 학생이 유λͺ…ν•œ κ΅μˆ˜λ‹˜μ„ μ°Ύμ•„κ°€ λ¬Όμ—ˆλ‹€.
"μž¬κ·€ν•¨μˆ˜κ°€ λ­”κ°€μš”?"
"잘 λ“€μ–΄λ³΄κ²Œ. μ˜›λ‚ μ˜›λ‚  ν•œ μ‚° κΌ­λŒ€κΈ°μ— 이세상 λͺ¨λ“  지식을 ν†΅λ‹¬ν•œ 선인이 μžˆμ—ˆμ–΄.
λ§ˆμ„ μ‚¬λžŒλ“€μ€ λͺ¨λ‘ κ·Έ μ„ μΈμ—κ²Œ μˆ˜λ§Žμ€ μ§ˆλ¬Έμ„ ν–ˆκ³ , λͺ¨λ‘ μ§€ν˜œλ‘­κ²Œ λŒ€λ‹΅ν•΄ μ£Όμ—ˆμ§€.
그의 닡은 λŒ€λΆ€λΆ„ μ˜³μ•˜λ‹€κ³  ν•˜λ„€. 그런데 μ–΄λŠ λ‚ , κ·Έ μ„ μΈμ—κ²Œ ν•œ μ„ λΉ„κ°€ μ°Ύμ•„μ™€μ„œ λ¬Όμ—ˆμ–΄."
____"μž¬κ·€ν•¨μˆ˜κ°€ λ­”κ°€μš”?"
____"잘 λ“€μ–΄λ³΄κ²Œ. μ˜›λ‚ μ˜›λ‚  ν•œ μ‚° κΌ­λŒ€κΈ°μ— 이세상 λͺ¨λ“  지식을 ν†΅λ‹¬ν•œ 선인이 μžˆμ—ˆμ–΄.
____λ§ˆμ„ μ‚¬λžŒλ“€μ€ λͺ¨λ‘ κ·Έ μ„ μΈμ—κ²Œ μˆ˜λ§Žμ€ μ§ˆλ¬Έμ„ ν–ˆκ³ , λͺ¨λ‘ μ§€ν˜œλ‘­κ²Œ λŒ€λ‹΅ν•΄ μ£Όμ—ˆμ§€.
____그의 닡은 λŒ€λΆ€λΆ„ μ˜³μ•˜λ‹€κ³  ν•˜λ„€. 그런데 μ–΄λŠ λ‚ , κ·Έ μ„ μΈμ—κ²Œ ν•œ μ„ λΉ„κ°€ μ°Ύμ•„μ™€μ„œ λ¬Όμ—ˆμ–΄."
________"μž¬κ·€ν•¨μˆ˜κ°€ λ­”κ°€μš”?"
________"μž¬κ·€ν•¨μˆ˜λŠ” 자기 μžμ‹ μ„ ν˜ΈμΆœν•˜λŠ” ν•¨μˆ˜λΌλ„€"
________라고 λ‹΅λ³€ν•˜μ˜€μ§€.
____라고 λ‹΅λ³€ν•˜μ˜€μ§€.
라고 λ‹΅λ³€ν•˜μ˜€μ§€.

μž¬κ·€(Recursion):

  • ν•¨μˆ˜ 슀슀둜 μžμ‹ μ„ μ°Έμ‘°ν•΄ ν˜ΈμΆœν•˜λ©΄μ„œ λ™μΌν•œ μ½”λ“œκ°€ κ³„μ†μ μœΌλ‘œ μˆ˜ν–‰λ˜λŠ” ν•¨μˆ˜ 호좜 방법
  • μž¬κ·€ ν•¨μˆ˜λŠ” νŠΉμ • 쑰건이 됐을 λ•Œ, μžμ‹ μ„ 그만 ν˜ΈμΆœλ˜λ„λ‘ μ œν•œν•˜λŠ” exit codeκ°€ ν•„μš”
  • μž¬κ·€ν•¨μˆ˜: ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ ν•œ 번 이상 μžμ‹ μ˜ ν•¨μˆ˜λ₯Ό 호좜
  • μž¬κ·€μ•Œκ³ λ¦¬μ¦˜: μ•Œκ³ λ¦¬μ¦˜ λ‚΄λΆ€μ—μ„œ ν•œ 번 이상 μžμ‹ μ˜ μ•Œκ³ λ¦¬μ¦˜μ„ 호좜

μž¬κ·€ν•¨μˆ˜λ₯Ό μ“°λŠ” 이유:

  • λ³€μˆ˜λ₯Ό μ—¬λŸΏ λ§Œλ“€ ν•„μš”κ°€ μ—†λ‹€.
  • μ½”λ“œκ°€ κ°„κ²°ν•΄μ§€κ³  직관적이기 λ•Œλ¬Έμ— 가독성이 λ†’μ•„μ§„λ‹€.
  • DFS(깊이 μš°μ„  탐색)을 함에 μžˆμ–΄ 자주 ν™œμš©λœλ‹€. 

μ˜ˆμ‹œ 1)

// 3 + 2 + 1 + 0
function recursive(num) {
	if (num == 0) return;
	recursive(num - 1);
}

// 3 + (2 + (1 + 0)) -> 6
console.log(recursive(3));

μ˜ˆμ‹œ 2)

function factorial(num) {
	if (num == 0) return 0;
    return num * factorial(num - 1);
}

// 3 * 2 * 1 * 0 -> 6
console.log(factorial(3));

+ Recent posts