English

Recursion

🎯 Learning Goals

  • Understand how a function calls itself
  • Learn the importance of the base case to prevent infinite loops

💡 Why Learn This?

Recursion is a fundamental concept in computer science. It allows us to break down complex problems into smaller, identical problems. It's heavily used in advanced data structures like trees and graphs, and in algorithms like Quick Sort and Merge Sort.

The Russian Nesting Doll

Recursion is a method where the solution to a problem depends on solutions to smaller instances of the same problem. Think of a Russian nesting doll: to find the smallest doll, you open the current one, and if there's a smaller one inside, you repeat the exact same process.

Real-world Examples

  • Looking up a word in a dictionary, and looking up the words in the definition.
  • File system directories: a folder contains folders, which contain more folders.

2 Core Concepts

1. The Base Case

The condition under which the recursion stops. Without this, the function will call itself forever (Stack Overflow!).

2. The Recursive Case

The part where the function calls itself with a modified (usually smaller) input.

⚠️ Common Pitfalls

The most common pitfall is forgetting the Base Case. If your recursive function doesn't have a stopping condition, it will run until the browser runs out of memory and crashes, resulting in a 'Maximum call stack size exceeded' error.

Factorial Simulator

Click 'Next Step' to visualize how recursion calculates the factorial of a number (N!). Watch how the call stack builds up and then resolves.

Call Stack
factorial(4)
Current Value:
factorial(4)

📝 Summary & Recap

  • Recursion occurs when a function calls itself.
  • Every recursive function MUST have a base case to stop the execution.

Quick Drill

Test your recursion knowledge!

What is essential for a recursive function to stop?

🔍 Deep Dive (Optional)

While recursion is elegant, it uses more memory than traditional loops because every function call is added to the 'Call Stack'. Some modern languages use 'Tail Call Optimization' to fix this, but JavaScript engines only partially support it. Always weigh readability vs performance!