Hint
Function calling itself β needs a base case; too many calls = call stack exhausted
Recursion is when a function calls itself. Every recursive function needs:
// Factorial
function factorial(n) {
if (n <= 1) return 1; // base case
return n * factorial(n - 1); // recursive case
}
factorial(5); // 120
// Flatten nested array
function flatten(arr) {
return arr.reduce((acc, item) =>
Array.isArray(item)
? acc.concat(flatten(item)) // recurse
: acc.concat(item),
[]);
}
flatten([1, [2, [3]]]); // [1, 2, 3]
Stack overflow: Each recursive call adds a stack frame. Without a base case (or with very deep recursion), the call stack fills up:
function infinite(n) {
return infinite(n + 1); // no base case!
}
infinite(1); // RangeError: Maximum call stack size exceeded