πŸ”„ Recursion & Backtracking β€” PHP Complete Topic Index

Parent: DSA Master Index


πŸ“¦ Subtopics

#SubtopicFileKey Concepts
1Recursion Basics01-basics/Call stack, base case, recursive case, stack overflow
2Recursion Patterns02-patterns/Tree recursion, D&C, permutations, subsets
3Backtracking03-backtracking/N-Queens, maze, Sudoku, combination sum
4Interview Questions04-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

ProblemTimeSpace (call stack)
Factorial nO(n)O(n)
Fibonacci naiveO(2ⁿ)O(n)
Fibonacci memoizedO(n)O(n)
Binary SearchO(log n)O(log n)
Merge SortO(n log n)O(n)
Generate all subsetsO(2ⁿ)O(n)
Generate permutationsO(n!)O(n)
N-QueensO(n!)O(n)
Sudoku SolverO(9^81) worstO(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

SituationUse RecursionUse Iteration
Tree/Graph traversalβœ… NaturalPossible with stack
Divide & Conquerβœ… CleanerPossible but complex
Backtrackingβœ… RequiredVery hard
Simple loops❌ Overheadβœ… Faster
Deep recursion (n>10000)❌ Stack overflow riskβœ… Safe