Recursividad en JavaScript: Conceptos y Ejemplos Prácticos

Clase 8 de 20Curso Intermedio de Programación Orientada a Objetos en JavaScript

Resumen

La recursividad es cuando una función se llama a sí misma y esta genera una nueva ejecución de la función. Esto sucede reiteradamente hasta que cumpla o no con cierta validación que nosotros declaremos para que deje de llamarse a sí misma en algún punto.

Normalmente, pensaríamos que este tipo de problemas lo podemos resolver con condicionales y/o bucles. Veamos el siguiente ejemplo:

// PROBLEMA:
// Deseamos imprimir una serie de números desde el 0 hasta n números. En este caso
// hasta el 4
let numerito = 0; // Declaramos desde el número que deseamos partir.

// Usamos un bucle while para repetir este proceso hasta que se cumpla la condición:
while(numerito < 5) {
	console.log(numerito);
	numerito++;
}

Así resolveríamos este problema con recursividad:

// Función recursiva:
function recursiva(numerito) { // Recive un número
	console.log(numerito); // Imprimimos en consola el número
	if (numerito < 5) { // Evalua si es menor a 5
		// Llamamos nuevamente a nuestra función enviandole el número siguiente:
		return recursiva(numerito + 1);
	} else { // La función deja de llamarse a sí misma:
		return 5;
	}
}

¿Por qué escribir programas recursivos?

  • Son más cercanos a la descripción matemática.
  • Generalmente más fáciles de analizar
  • Se adaptan mejor a las estructuras de datos recursivas.
  • Los algoritmos recursivos ofrecen soluciones estructuradas, modulares y elegantemente simples.

¿Cuándo SÍ es factible de utilizar recursividad?

  • Para simplificar el código.
  • Cuando la estructura de datos es recursiva. Ejemplo: árboles.

¿Cuándo NO es factible utilizar recursividad?

  • Cuando los métodos usen arreglos largos.
  • Cuando el método cambia de manera impredecible de campos.
  • Cuando las iteraciones sean la mejor opción

Empleemos ahora la recursividad para poder aplicar el Deep Copy en JavaScript y así copiar de manera óptima nuestros objetos. 🤓💪

Contribución creada por: Martín Álvarez (Platzi Contributor) con el aporte de Carlos Mazzaroli.