Técnica donde una función se llama a sí misma para resolver problemas descomponiéndolos en subproblemas.
Requiere un caso base para evitar recursión infinita. Útil para árboles, grafos y algoritmos divide y vencerás.
// Recursión básica - Factorial function factorial(n: number): number { // Caso base if (n <= 1) return 1; // Caso recursivo return n * factorial(n - 1); } factorial(5); // 5 * 4 * 3 * 2 * 1 = 120 // Fibonacci recursivo function fibonacci(n: number): number { if (n <= 1) return n; return fibonacci(n - 1) + fibonacci(n - 2); } // Fibonacci optimizado con memoización function fibonacciMemo(n: number, memo: Record<number, number> = {}): number { if (n in memo) return memo[n]; if (n <= 1) return n; memo[n] = fibonacciMemo(n - 1, memo) + fibonacciMemo(n - 2, memo); return memo[n]; } // Recorrer árbol recursivamente function recorrerArbol(nodo: TreeNode | null): void { if (!nodo) return; // Caso base console.log(nodo.valor); recorrerArbol(nodo.izquierda); recorrerArbol(nodo.derecha); } // Aplanar array anidado function aplanar(arr: any[]): any[] { return arr.reduce((flat, item) => flat.concat(Array.isArray(item) ? aplanar(item) : item), []); }