📖 Scenario: Imagine you have a stack of plates, and you want to count how many plates are in the stack by taking one plate off at a time until none are left.
🎯 Goal: You will build a simple recursive function in TypeScript that counts down from a number to zero using recursion. This will teach you how to set a base case and a recursive case.
📋 What You'll Learn
Create a variable called startNumber with the value 5.
Create a recursive function called countDown that takes a number parameter called num.
In countDown, write a base case that stops recursion when num is zero or less.
In the recursive case, print the current num and call countDown with num - 1.
Call countDown with startNumber.
Print each number on its own line.
💡 Why This Matters
🌍 Real World
Recursion is used in many places like searching files in folders, solving puzzles, and processing nested data.
💼 Career
Understanding recursion helps in writing clean code for problems that repeat themselves, which is common in software development and technical interviews.
Progress0 / 4 steps
1
Create the starting number
Create a variable called startNumber and set it to 5.
DSA Typescript
Hint
Use const startNumber = 5; to create the variable.
2
Define the recursive function
Create a function called countDown that takes a parameter num of type number.
DSA Typescript
Hint
Use function countDown(num: number): void { } to define the function.
3
Add base case and recursive case
Inside countDown, write a base case that returns when num is less than or equal to zero. Otherwise, print num and call countDown with num - 1.
DSA Typescript
Hint
Use if (num <= 0) { return; } for the base case. Then print num and call countDown(num - 1).
4
Call the function and print output
Call countDown with startNumber to start the countdown.
DSA Typescript
Hint
Use countDown(startNumber); to start the countdown.
Practice
(1/5)
1. What is the purpose of the base case in a recursive function?
easy
A. To call the function again with a smaller input
B. To stop the recursion and prevent infinite calls
C. To increase the input size for the next call
D. To print the result of the recursion
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 the function returns without calling itself again.
Final Answer:
To stop the recursion and prevent infinite calls -> Option B
Quick Check:
Base case = stop recursion [OK]
Hint: Base case stops recursion to avoid infinite loops [OK]
Common Mistakes:
Thinking base case calls recursion again
Confusing base case with recursive case
Ignoring base case leads to infinite recursion
2. Which of the following is the correct syntax for a recursive function in TypeScript that calculates factorial?
easy
A. function factorial(n: number): number { if (n === 0) return 1; else return n * factorial(n - 1); }
B. function factorial(n: number): number { while (n > 0) return n * factorial(n - 1); }
C. function factorial(n: number): number { if (n === 1) return 0; else return n + factorial(n - 1); }
D. function factorial(n: number): number { return n * factorial(n + 1); }
Solution
Step 1: Check base case correctness
function factorial(n: number): number { if (n === 0) return 1; else return n * factorial(n - 1); } uses if (n === 0) return 1; which is correct for factorial base case.
Step 2: Check recursive call correctness
function factorial(n: number): number { if (n === 0) return 1; else return n * factorial(n - 1); } calls factorial(n - 1) and multiplies by n, which matches factorial definition.
Final Answer:
function factorial(n: number): number { if (n === 0) return 1; else return n * factorial(n - 1); } -> Option A
Quick Check:
Correct base and recursive case syntax = function factorial(n: number): number { if (n === 0) return 1; else return n * factorial(n - 1); } [OK]
Hint: Base case returns 1 for factorial, recursive calls with n-1 [OK]
Common Mistakes:
Using while loop instead of recursion
Wrong base case value
Recursive call increasing n causing infinite recursion
3. What will be the output of this TypeScript code?
function sumTo(n: number): number {
if (n === 0) return 0;
return n + sumTo(n - 1);
}
console.log(sumTo(3));
Hint: Add n plus sumTo(n-1) until base case 0 [OK]
Common Mistakes:
Confusing base case return value
Adding instead of multiplying
Missing base case causing infinite recursion
4. Identify the error in this recursive function and select the fix.
function countdown(n: number): void {
if (n === 0) return;
console.log(n);
countdown(n + 1);
}
countdown(3);
medium
A. Change console.log(n) to console.log(n - 1)
B. Add a base case for n === 1
C. Remove the base case to allow infinite recursion
D. Change countdown(n + 1) to countdown(n - 1)
Solution
Step 1: Analyze recursive call direction
The function calls countdown(n + 1), which increases n, causing infinite recursion.
Step 2: Fix recursive call to decrease n
Changing to countdown(n - 1) moves towards base case n === 0, stopping recursion.
Final Answer:
Change countdown(n + 1) to countdown(n - 1) -> Option D
Quick Check:
Recursive call must approach base case [OK]
Hint: Recursive calls must reduce input to reach base case [OK]
Common Mistakes:
Increasing input causing infinite recursion
Missing or wrong base case
Changing print statement instead of recursion
5. You want to write a recursive function flatten that takes a nested array of numbers (e.g., [1, [2, [3]], 4]) and returns a flat array [1, 2, 3, 4]. Which approach correctly uses base and recursive cases?
hard
A. Base case: always return input; Recursive case: never call flatten recursively
B. Base case: if input is number, return number; Recursive case: call flatten on input
C. Base case: if input is empty array, return empty array; Recursive case: for each element, if array, call flatten, else add element
D. Base case: if input is array, return input; Recursive case: if input is number, call flatten
Solution
Step 1: Define base case for empty array
If the input array is empty, return an empty array to stop recursion.
Step 2: Define recursive case for nested arrays
For each element, if it is an array, recursively call flatten; if not, add element to result.
Final Answer:
Base case: if input is empty array, return empty array; Recursive case: for each element, if array, call flatten, else add element -> Option C