La recursión es una herramienta elegante y muy usada en JavaScript para recorrer árboles, estructuras anidadas o aplicar estrategias de divide y vencerás, pero esconde un límite físico: cada llamada consume espacio en la pila de ejecución. Cuando la profundidad crece lo suficiente, el motor lanza un error de tipo RangeError o "too much recursion", aunque la función sea lógicamente correcta. Una creencia muy extendida es que la optimización de cola (tail call optimization, TCO) resuelve este problema, porque permite reutilizar el mismo marco de pila cuando la llamada recursiva es la última operación. Sin embargo, ECMAScript 2015 especificó las tail calls en modo estricto, pero los principales motores JavaScript nunca la implementaron de forma consistente: V8 (Chrome, Node.js y Deno) no la soporta, SpiderMonkey (Firefox) tampoco, y JavaScriptCore (Safari, Bun) la ofreció en algunas versiones y la retiró después. En la práctica, ningún desarrollador puede asumir que una función tail-recursive será segura frente a desbordamientos en producción.
El artículo señala además que la función recursiva clásica de Fibonacci, además del riesgo de pila, tiene complejidad temporal exponencial (O(2ⁿ)): fib(50) implica decenas de miles de millones de llamadas, lo que bloquea el navegador mucho antes de tocar el límite de pila. Como alternativa, el texto propone reescribir cualquier algoritmo recursivo de forma iterativa con un bucle y un acumulador, o recurrir a patrones como el trampolín (un bucle que llama repetidamente a funciones que devuelven otra función a invocar o el resultado final). Estos enfoques no dependen de optimizaciones del motor y permiten mantener el modelo mental recursivo sin riesgo de caída.
