What if you could solve big problems by solving tiny pieces again and again until done?
Why Recursion Base Case and Recursive Case in DSA Javascript?
Imagine you want to find the total number of steps to climb a tall staircase by counting each step one by one manually.
You start at the bottom and try to count all steps without stopping until you reach the top.
Counting each step manually is slow and tiring, especially if the staircase is very tall.
You might lose track or get confused about where you are, making mistakes easy.
Recursion breaks the big problem into smaller, easier problems.
The base case tells when to stop counting (like reaching the top step).
The recursive case moves one step up and calls itself to count the rest.
function countSteps(steps) {
let total = 0;
for (let i = 1; i <= steps; i++) {
total += 1;
}
return total;
}function countSteps(steps) {
if (steps === 0) return 0; // base case
return 1 + countSteps(steps - 1); // recursive case
}It allows solving complex problems by repeating simple steps until a clear stopping point is reached.
Calculating factorial of a number, where you multiply the number by factorial of one less, stopping at 1.
Base case stops the recursion to prevent infinite loops.
Recursive case breaks the problem into smaller parts.
Together, they make complex problems easier to solve step-by-step.
Practice
base case in a recursive function?Solution
Step 1: Understand what recursion does
Recursion calls the same function repeatedly with smaller inputs.Step 2: Identify the role of the base case
The base case stops the recursion by providing a condition where no further calls happen.Final Answer:
To stop the recursion and prevent infinite calls -> Option CQuick Check:
Base case = stop recursion [OK]
- Confusing base case with recursive case
- Thinking base case calls recursion again
- Ignoring base case leads to infinite recursion
function factorial(n) {
if (___) {
return 1;
}
return n * factorial(n - 1);
}Solution
Step 1: Recall factorial base case
Factorial of 0 is 1, so base case is when n equals 0.Step 2: Match condition to code
The conditionn === 0correctly stops recursion and returns 1.Final Answer:
n === 0 -> Option BQuick Check:
Base case for factorial = n === 0 [OK]
- Using n > 0 as base case causes infinite recursion
- Using n < 0 which is invalid for factorial
- Using n === 1 misses factorial(0) base case
function sumTo(n) {
if (n === 0) {
return 0;
}
return n + sumTo(n - 1);
}
console.log(sumTo(3));Solution
Step 1: Trace recursive calls
sumTo(3) calls 3 + sumTo(2), sumTo(2) calls 2 + sumTo(1), sumTo(1) calls 1 + sumTo(0), sumTo(0) returns 0.Step 2: Calculate total sum
sumTo(3) = 3 + 2 + 1 + 0 = 6.Final Answer:
6 -> Option AQuick Check:
3+2+1+0 = 6 [OK]
- Forgetting to add current n before recursive call
- Confusing base case return value
- Assuming output is just n instead of sum
function fib(n) {
if (n === 0) return 0;
if (n === 1) return 1;
return fib(n - 1) + fib(n - 2);
}
console.log(fib(-1));Solution
Step 1: Analyze base cases and input
Base cases cover n=0 and n=1, but input is n=-1 which is not handled.Step 2: Understand recursion with negative input
Calling fib(-1) leads to fib(-2) and fib(-3) calls infinitely, no stop condition.Final Answer:
Missing base case for negative n causing infinite recursion -> Option AQuick Check:
Negative input needs base case [OK]
- Ignoring negative inputs in recursion
- Assuming fib(-1) is valid without base case
- Changing recursive calls incorrectly
function reverse(str) {
if (___) {
return ___;
}
return reverse(___) + str[0];
}Solution
Step 1: Identify base case for empty string
When string is empty (''), return the empty string to stop recursion.Step 2: Define recursive call correctly
Call reverse on substring from index 1 to end, then add first character at the end.Final Answer:
str === '' / str / str.slice(1) -> Option DQuick Check:
Empty string base case and slice(1) recursive call [OK]
- Using null instead of empty string as base case
- Returning wrong substring in recursive call
- Incorrect base case condition
Ready to prove it?
Pass the test and this pattern moves unknown
