驴Qu茅 es la recursividad?
Frecuentemente cuando hablamos de la recursividad pareciera que estamos tocando un tema complejo con el cual los estudiantes tienen bastante renuencia.
Para simplificar el tema de la recursividad vamos a empezar definiendo a la recursividad como otra forma de solucionar problemas. Al escribir algoritmos podemos utilizar la forma iterativa o la recursiva, una echa mano de los ciclos (loops) y la otra de invocar a la misma funci贸n (recursividad).
Cuando hablamos de recursividad, hablamos de un proceso (una funci贸n en nuestro caso) que se llama a si misma.
驴Por qu茅 deber铆a utilizar la recursividad?
La recursividad es muy importante porque es la soluci贸n utilizada en muchos de los problemas de programaci贸n.
驴Qu茅 es el call stack (pila de llamadas)?
En muchos lenguajes de programaci贸n, hay una estructura de datos incorporada llamada call stack (pila de llamadas) que se encarga de determinar que sucede cuando las funciones son invocadas.
Cuando una funci贸n es llamada, dicha funci贸n es puesta en la parte superior (final) de la pila de llamadas. Cuando encontramos una instrucci贸n return o cuando la funci贸n finaliza, el compilador ejecuta la instrucci贸n pop para remover de la pila la 煤ltima instrucci贸n.
驴C贸mo operan las funciones recursivas?
Una funci贸n recursiva se invoca a si misma con diferentes valores de entrada, hasta que se cumple una condici贸n que retorna un valor o hace que la funci贸n finalice.
Las dos partes esenciales de una funci贸n recursiva son:
- La condici贸n base
- Valores cambiantes
function sumar(numero) {
// condici贸n base
if (numero === 1) {
return numero;
}
// valor de entrada cambiante
return numero + sumar(numero - 1);
}
C谩lculo del factorial de un n煤mero
La siguiente funci贸n realiza el c谩lculo factorial de un n煤mero utilizando la forma recursiva.
function factorial(num) {
let total = 1;
for (let i = num; i > 1; i--) {
total = total * i;
}
return total;
}
El equivalente de la funci贸n del calculo factorial utilizando la recursividad es el siguiente.
function factorial(numero) {
if (numero > 1) {
return numero * factorial(numero - 1);
}
return numero;
}