Funciones Recursivas: Python

Compartir

Concepto exótico...

Las funciones recursivas son una herramienta poderosa en la programación que permite una solución elegante y eficiente a problemas que se pueden descomponer en subproblemas más pequeños. En Python, podemos implementar funciones recursivas de manera bastante sencilla. En este blog, te mostraré cómo puedes utilizar funciones recursivas en Python.

Qué es una función recursiva y cómo se implementa?

Una función recursiva es una función que se llama a sí misma durante su propia ejecución. En otras palabras, una función recursiva es una función que se define en términos de sí misma.

Esto es difícil de digerir propiamente a partir del concepto elemental, pero se puede explicar como la forma de realizar un ciclo elegante con las caracterísiticas intrísecas de la función… Disculpa, es mi forma de entenderlo, mejor veamos un ejemplo simple.

Supongamos que queremos calcular el factorial de un número. El factorial de un número es el producto de todos los números enteros positivos desde 1 hasta ese número. Por ejemplo, el factorial de 5 se calcula como 5 * 4 * 3 * 2 * 1 = 120.

Podemos definir una función factorial que utiliza recursividad para calcular el factorial de un número, de la siguiente manera:

try:
    numero=int(input(‘Digite el valor a analizar: ‘))
    def factorial(numero):
        if (numero==1 or numero==0):
            return 1
        else:
            return numero*factorial(numero1)
    resultado=factorial(numero)
    print(f‘El factorial de {numero} es: {resultado})
except RecursionError as re:
    print(f{re}. Ha ingresado un número negativo’)
except Exception as e:
    print(f‘Ha ocurrido un error del tipo: {e})

El código anterior explica que la función puede recibir cualquier valor de un número entero por consola y con esa información se puede ingresar a la función recursiva para poder calcular el factorial del número ingresado. Si el número ingresado es 1 o 0, la función devuelve el valor de 1. Si se ingresa un número mayor a 1, la función se llama así misma con el argumento $numero-1$, y multiplica el resultado por $numero$, el argumento inicial de la función, esto lo hace hasta que el argumento $numero-1$ sea igual a 1.

La función se encuentra dentro de un bloque try-except, este bloque gestiona los errores que se derivan de ingresar números negativos a la función o por ingresar valores no porcesables por la función. La Excepción «RecursionError», devuelve un aviso que decribe que se han alcanzado los límites de recursión, nosotros hemos gestionado ese error para avisarle al usuario que no debe ingresar números negativos a la función. La excepción «Exception» está definida en la clase Exception, clase padre de todos los tipos de excepciones. Hemos utilizado esta excepción para gestionar errores como por ejemplo errores de «type» o cualquier otro que transgreda el propósito de la función.

A pesar que ahora la función es capaz de calcular el factorial de cualquier número mayor o igual a 0, iniciamos diciendo que ibamos a proponer como ejemplo principal el cáculo de $5!$.

El resultado de la ejecución del programa en consola es el siguiente:

Digite el valor a analizar: 5

El factorial de 5 es: 120

Cuando se ingresa un número negativo:

Digite el valor a analizar: -7

maximum recursion depth exceeded in comparison. Ha ingresado un número negativo

Y cuando se ingresasn caracteres especiales a la función:

Digite el valor a analizar: q

Ha ocurrido un error del tipo: invalid literal for int() with base 10: ‘q’

Aquí vemos las 3 posibles ciscunstancias en que nuestras función puede operar, cuando se quiere determinar el factorial de un número natural, cuando se ha ingresado un número negativo, y simplemente cuando se ha ingresado cualquier otra cosa a la función.

Te invito a reutilizar esta función, e intenta calcular el factorial de un número decimal, revisa el mensaje de la función e investiga el porqué obtines ese resultado.

Espero que esto te pueda ayudar a resolver alguna situación interesante, en dónde apliques recursividad para concluir en una solución elegante.

Gracias por leer y hasta la próxima.

 


Compartir

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *