DEV Community

Marco Agüero
Marco Agüero

Posted on

Comprendiendo la recursividad

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]
Enter fullscreen mode Exit fullscreen mode

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.
Enter fullscreen mode Exit fullscreen mode

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

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)
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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:

def factorial(num):
   if num == 1:
       return num
   else:
       return num*factorial(num-1)
Enter fullscreen mode Exit fullscreen mode

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

Top comments (0)