遞迴
函式呼叫自身,即遞迴,用於解決包含更小子問題的更宏觀的問題。遞迴函式可以接收兩個輸入:基本情況(結束遞迴)或遞迴情況(繼續遞迴)。
示例
遞迴函式呼叫自身,直到滿足條件
下面的 Python 程式碼定義了一個函式,該函式接收一個數字,列印該數字,然後用該數字減 1 來再次呼叫自身。它會一直進行下去,直到數字等於 0,這時它會停止。
python
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;
}
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