ì¬ê· (Recursion)
ì기 ìì ì í¸ì¶íë í¨ìì íìì¸ ì¬ê·ë ë ìì íì 문ì 를 ì´í¨íë 문ì 를 í´ê²°íë ë° ì¬ì©ë©ëë¤. ì¬ê· í¨ìë 기본 ì¬ë¡(ì¬ê· ì¢ ë£) ëë ì¬ê· ì¬ë¡(ì¬ê· ì¬ê°)ì ë ê°ì§ ì ë ¥ì ë°ì ì ììµëë¤.
ìì
>ì¬ê· í¨ìë ì¡°ê±´ì´ ì¶©ì¡±ë ëê¹ì§ ìì ì í¸ì¶í©ëë¤
ìë Python ì½ëë ì«ì를 ê°ì ¸ì ì¸ìí ë¤ì ì«ì ê° -1ì ì¬ì©íì¬ ìì ì ë¤ì í¸ì¶íë í¨ì를 ì ìí©ëë¤. ì«ìê° 0ì´ ë ëê¹ì§ ê³ì ì§íëë©°, 0ì´ ëë©´ ì¤ì§ë©ëë¤.
py
def recurse(x):
if x > 0:
print(x)
recurse(x - 1)
recurse(10)
ì¶ë ¥ì ìëì ê°ìµëë¤.
10 9 8 7 6 5 4 3 2 1
ì¬ê·ë ì¤í í¬ê¸°ì ë°ë¼ ì íë©ëë¤
ìë ì½ëë ì½ëê° ì¤íëë JavaScript ë°íììì ì¬ì©í ì ìë í¸ì¶ ì¤íì ìµë í¬ê¸°ë¥¼ ë°ííë í¨ì를 ì ìí©ëë¤.
js
const getMaxCallStackSize = (i) => {
try {
return getMaxCallStackSize(++i);
} catch {
return i;
}
};
console.log(getMaxCallStackSize(0));
ì¼ë°ì ì¸ ì¬ì© ìì
js
const factorial = (n) => {
if (n === 0) {
return 1;
} else {
return n * factorial(n - 1);
}
};
console.log(factorial(10));
// 3628800
js
const fibonacci = (n) => (n <= 2 ? 1 : fibonacci(n - 1) + fibonacci(n - 2));
console.log(fibonacci(10));
// 55
js
const reduce = (fn, acc, [cur, ...rest]) =>
cur === undefined ? acc : reduce(fn, fn(acc, cur), rest);
console.log(reduce((a, b) => a + b, 0, [1, 2, 3, 4, 5, 6, 7, 8, 9]));
// 45