π Recursion & Backtracking β PHP Complete Topic Index
Parent: DSA Master Index
π¦ Subtopics
| # | Subtopic | File | Key Concepts |
| 1 | Recursion Basics | 01-basics/ | Call stack, base case, recursive case, stack overflow |
| 2 | Recursion Patterns | 02-patterns/ | Tree recursion, D&C, permutations, subsets |
| 3 | Backtracking | 03-backtracking/ | N-Queens, maze, Sudoku, combination sum |
| 4 | Interview Questions | 04-interview-questions/ | Top 25 questions with full solutions |
π§ Recursion β Big Picture
Recursion
βββ Base Case β Stops infinite recursion
βββ Recursive Case β Breaks problem into smaller sub-problems
βββ Call Stack β Each call gets its own frame
βββ Direct Recursion β f() calls f()
βββ Indirect Recursion β f() calls g(), g() calls f()
βββ Backtracking β Recursion + Undo (explore, choose, unchoose)
β±οΈ Complexity Cheat Sheet
| Problem | Time | Space (call stack) |
| Factorial n | O(n) | O(n) |
| Fibonacci naive | O(2βΏ) | O(n) |
| Fibonacci memoized | O(n) | O(n) |
| Binary Search | O(log n) | O(log n) |
| Merge Sort | O(n log n) | O(n) |
| Generate all subsets | O(2βΏ) | O(n) |
| Generate permutations | O(n!) | O(n) |
| N-Queens | O(n!) | O(n) |
| Sudoku Solver | O(9^81) worst | O(81) |
π― Backtracking Template
function backtrack(array &$result, array &$current, ...$params): void
{
// 1. Base case β found a complete solution
if (isSolution($current)) {
$result[] = $current;
return;
}
// 2. Try every possible choice
foreach (choices($params) as $choice) {
// 3. Choose
$current[] = $choice;
// 4. Explore
backtrack($result, $current, /* updated params */);
// 5. Un-choose (backtrack)
array_pop($current);
}
}
π When to Use Recursion vs Iteration
| Situation | Use Recursion | Use Iteration |
| Tree/Graph traversal | β
Natural | Possible with stack |
| Divide & Conquer | β
Cleaner | Possible but complex |
| Backtracking | β
Required | Very hard |
| Simple loops | β Overhead | β
Faster |
| Deep recursion (n>10000) | β Stack overflow risk | β
Safe |