Comprendiendo la recursividad
Tags: javascript, python, programacion, webdev
Published: 2022-08-24 23:49:16


Hey, que tal?
Espero que tu querido lector que encontraste este post, estés pasando un excelente día! 😎
***
Hoy quiero hablar sobre un tema sumamente interesante e importante para los desarrolladores, la `recursividad` pues este es un tema con el que te vas a encontrar en algún momento de tu carrera y mientras mas temprano lo comprendas mejor será para ti.
Antes de empezar debes entender que la recursividad no es algo complicado, simplemente debes comprender muy bien los conceptos básicos y con esto podrás resolver los problemas que se te presenten.
***
## ¿Qué es la recursividad?
La recursividad es un proceso mediante el cual una función se llama a si misma repetidas veces con la intención de resolver un problema.

Entendamos esto con ejemplos muy sencillos; imagina que tienes un computador muy simple, únicamente puede resolver problemas mediante operaciones sencillas. 
Tienes una lista de números:
```
li = [1, 2, 3, 4, 5, 6]
```
Ahora, por cada elemento de esa lista tienes que verificar cual de ellos es el valor de x de la función: `f(x): x-2 = 2`, podríamos verificarlo fácilmente si utilizamos un bucle, por ejemplo "While" o "for", y te doy un ejemplo en pseudocódigo: 

> - Por cada elemento de la lista `li`:
> - Si el resultado de restarle 2 al elemento es igual a 2:
> - imprime verdadero

Al no poder hacer esto, ya que tenemos un computador muy simple, entonces debemos idear una solución. Bueno una forma de hacerlo seria hacer una función sencilla, que verifique si el primer elemento de la lista cumple con lo especificado, y que de no ser así, lo elimine y vuelva a preguntarse a si mismo si el siguiente elemento es el que estamos buscando.

¿Te perdiste? No te preocupes, vamos a ver un ejemplo:

Primero en pseudocódigo y luego lo veremos en código, tenemos la lista `li`:

```
Tenemos una lista:
li = [1, 2, 3, 4, 5, 6]
-> Creamos una función que recibe esa lista.
-> Verifica si el primer elemento de la lista existe.
-> Si es correcto pregunta: ¿elemento - 2 = 2?
-> Si esto también fue correcto, entonces retorne verdadero.
-> En caso de que sea falso, entonces elimine el primer elemento de la lista y vuelva a llamar esta función con la nueva lista.
```

Bien, eso es todo... ¿Sencillo no? Ok ok, vamos al ejemplo en código:
> Para efectos de este tutorial utilizare Python para los ejemplos en código, si gustan otro lenguaje cono Java o JavaScript déjenlo en los comentarios :D

```py
lista = [1, 2, 3, 4, 5, 6]
def miFuncion(li):
    elem = li[0]
    if elem - 2 == 2:
        print("True", li[0])
    else:
        li.pop(0)
        miFuncion(li)

miFuncion(lista)
```
Bien, ahora espero hayas comprendido la función anterior, ahora veamos un ejemplo un poco mas avanzado, vamos a crear una función que nos retorne el factorial de un numero.
Primero entendamos la teoría del factorial:

- Se denota `n!` y se lee "n factorial".
- Corresponde al producto de los números enteros positivos desde uno hasta 'n', incluso, es decir:
```
n! = 1 * 2 * 3 * ... (n-2)*(n-1)*n
```
Ejemplos:
a) 3! = 3 * 2 * 1 = 6
b) 5! = 5 * 4 * 3 * 2 * 1 = 120
c) 6! = 6 * 5! = 6 * 120 = 720

Muy bien, ahora que entendimos la función factorial, vamos a programarla:
```py
def factorial(num):
   if num == 1:
       return num
   else:
       return num*factorial(num-1)
```
Y eso es todo, con eso ya tenemos la función factorial trabajando, luego simplemente es añadir validaciones como por ejemplo que si es un numero negativo retorne un mensaje, si el numero es cero, que retorne otro y con eso la función estaría mas que perfecta.

Eso que acabamos de ver es recursividad, únicamente necesitas comprender que es lo que esta haciendo la función por dentro para poder comprenderla. 

Espero este tutorial te sea de ayuda, si tienes dudas déjalas en los comentarios y con gusto los leeré y tratare de continuar explicando o enseñando :D