A stack overflow happens when a program uses more space in the call stack than it has. This usually occurs because of too many nested function calls.
Stack overflow concept in Javascript
function recursiveFunction(count) { if (count <= 0) { return 'Done'; } return recursiveFunction(count - 1); } // Calling with a very large number may cause stack overflow recursiveFunction(1000000);
This example shows a simple recursive function that calls itself.
If the number is too large, the program runs out of stack space and crashes.
function recursiveFunction(count) { if (count <= 0) { return 'Done'; } return recursiveFunction(count - 1); } console.log(recursiveFunction(3));
function recursiveFunction(count) { if (count <= 0) { return 'Done'; } return recursiveFunction(count - 1); } console.log(recursiveFunction(0));
function recursiveFunction(count) { // No base case causes infinite recursion return recursiveFunction(count); } // This will cause stack overflow immediately recursiveFunction(1);
This program shows a safe recursive call with count 5, which works fine.
Then it tries a very large count that causes a stack overflow error, caught and printed.
function recursiveFunction(count) { if (count <= 0) { return 'Done'; } return recursiveFunction(count - 1); } console.log('Calling with count = 5'); console.log(recursiveFunction(5)); console.log('Calling with count = 1000000 (may cause stack overflow)'); try { recursiveFunction(1000000); } catch (error) { console.log('Error:', error.message); }
Time complexity depends on the number of recursive calls, here O(n).
Space complexity is also O(n) because each call uses stack space.
Common mistake: forgetting the base case causes infinite recursion and stack overflow.
Use iteration or tail recursion optimization to avoid stack overflow if possible.
Stack overflow happens when too many function calls use up the call stack memory.
Recursive functions need a base case to stop calling themselves.
Large or infinite recursion causes stack overflow errors.
Practice
stack overflow error in JavaScript?Solution
Step 1: Understand what the call stack is
The call stack keeps track of function calls in JavaScript. Each call uses some memory.Step 2: Identify what causes overflow
If functions call themselves too many times without stopping, the stack runs out of memory, causing overflow.Final Answer:
Too many nested function calls without stopping -> Option CQuick Check:
Stack overflow = too many nested calls [OK]
- Thinking global variables cause stack overflow
- Confusing variable count with call stack size
- Assuming single function call causes overflow
Solution
Step 1: Check each function for recursion
function countDown(n) { if(n <= 0) return; countDown(n - 1); } has a base case stopping recursion. function infinite() { infinite(); } calls itself endlessly without a base case. Options C and D are normal functions without recursion.Step 2: Identify which causes stack overflow
Only function infinite() { infinite(); } causes infinite recursion, leading to stack overflow error.Final Answer:
function infinite() { infinite(); } -> Option AQuick Check:
Infinite recursion = stack overflow [OK]
- Assuming all recursive functions cause overflow
- Ignoring base case in recursion
- Confusing normal functions with recursive ones
function recurse(n) {
if (n === 0) return 'Done';
return recurse(n - 1);
}
console.log(recurse(3));Solution
Step 1: Trace the recursive calls
recurse(3) calls recurse(2), then recurse(1), then recurse(0). At n=0, it returns 'Done'.Step 2: Return values propagate back
Each call returns the result of the next call, so finally recurse(3) returns 'Done'.Final Answer:
"Done" -> Option DQuick Check:
Base case stops recursion, returns 'Done' [OK]
- Expecting stack overflow without base case
- Thinking recursion returns input number
- Ignoring return propagation
function factorial(n) {
return n * factorial(n - 1);
}Solution
Step 1: Check for base case in recursion
The function calls itself without any condition to stop, so recursion never ends.Step 2: Understand stack overflow cause
Without a base case, calls pile up until memory runs out, causing stack overflow.Final Answer:
Missing base case to stop recursion -> Option BQuick Check:
Base case missing = infinite recursion [OK]
- Assuming multiplication causes error
- Ignoring need for base case
- Thinking function name affects recursion
function sum(n) {
return n + sum(n - 1);
}Solution
Step 1: Identify missing base case
The function calls itself with n-1 but never stops, causing overflow.Step 2: Add base case to stop recursion
Adding if (n <= 0) return 0; stops recursion when n reaches 0 or less.Step 3: Confirm safe recursion
With base case, recursion ends properly and sum is calculated without overflow.Final Answer:
Add a base case: if (n <= 0) return 0; -> Option AQuick Check:
Base case stops recursion safely [OK]
- Changing operator instead of adding base case
- Increasing n causing infinite recursion
- Removing recursion loses function purpose
Ready to prove it?
Pass the test and this pattern moves unknown
