A recursive function in JavaScript is a function that calls itself to solve a problem by breaking it into smaller, similar sub-problems. The function keeps calling itself until it reaches a condition where it stops, called the base case.

1.Basic Structure of Recursion

function recurse() {
// base case
// recursive call
}

Two Essential Parts

  1. Base Case → when to stop
  2. Recursive Case → function calling itself

2.Simple Example

Countdown

function countdown(n) {
if (n === 0) return; // base case
console.log(n);
countdown(n - 1);   // recursive call
}
countdown(5);

 

Output

5
4
3
2
1

3.Factorial Example (Classic)

Mathematical Definition

5! = 5 × 4 × 3 × 2 × 1

JavaScript Implementation

function factorial(n) {
if (n === 1) return 1;     // base case
return n * factorial(n - 1);
}
console.log(factorial(5)); // 120

4.Fibonacci Sequence

function fibonacci(n) {
if (n <= 1) return n;   // base case
return fibonacci(n - 1) + fibonacci(n - 2);
}
console.log(fibonacci(6)); // 8

⚠️ Inefficient for large n

5.Recursion Call Stack (Important)

Every recursive call is stored in the call stack.

Example:

factorial(3)
→ factorial(2)
→ factorial(1)

Stack unwinds:

1 → 2 → 6

❗ Too many calls → Maximum call stack size exceeded

6.Recursive vs Loop

Loop

let sum = 0;
for (let i = 1; i <= 5; i++) {
sum += i;
}

Recursive

function sum(n) {
if (n === 0) return 0;
return n + sum(n - 1);
}

✔ Recursion is cleaner
✔ Loops are more memory-efficient

7.Recursion with Arrays

Sum of Array

function arraySum(arr) {
if (arr.length === 0) return 0;
return arr[0] + arraySum(arr.slice(1));
}
console.log(arraySum([1, 2, 3])); // 6

 

Flatten Array

function flatten(arr) {
return arr.reduce((acc, val) =>
Array.isArray(val)
? acc.concat(flatten(val))
: acc.concat(val)
, []);
}
flatten([1, [2, [3, 4]], 5]);

8.Recursion with Objects (Tree Traversal)

const tree = {
value: 1,
children: [
{ value: 2, children: [] },
{ value: 3, children: [] }
]
};
function traverse(node) {
console.log(node.value);
node.children.forEach(traverse);
}

traverse(tree);

 

✔ Used in DOM traversal
✔ Used in JSON processing

9.Infinite Recursion (Common Mistake)

function test() {
test(); // ❌ no base case
}

⚠️ Causes stack overflow

10.Tail Recursion

A recursion where the function returns only the recursive call.

function factorial(n, result = 1) {
if (n === 1) return result;
return factorial(n - 1, n * result);
}

✔ More memory-efficient (not optimized in JS engines yet)

Categorized in:

Javascript,