Funciones recursivas con Python

Las funciones recursivas en Python son funciones que contienen en su bloque de código una llamada a su propia función. Todas las funciones recursivas deben tener tanto una llamada a sí mismas como la posibilidad de retornar un valor sin llamarse nuevamente.

En cada llamada a la función, debería reducirse la complejidad. De otra forma, nuestra función recursiva no tendría final.

Veamos algunos ejemplos sencillos de este tipo de funciones:

def visualizar(valor):
    if valor > -2:
        print(valor)
        visualizar(valor-1)
       

visualizar(3)
# 3
# 2
# 1
# 0
# -1

En la función anterior debemos tener claro que si no colocamos la estructura if de Python consultando que valor sea mayor que -2, podríamos entrar en bucle infinito y que nuestro programa no funcionara como esperáramos y se bloqueara, ya que estaría llamando de forma indefinida a la función visualizar.

def visualizar(valor):
    if valor > 0:
        print(valor * '▓')
        visualizar(valor-1)

visualizar(10)

# ▓▓▓▓▓▓▓▓▓▓
# ▓▓▓▓▓▓▓▓▓
# ▓▓▓▓▓▓▓▓
# ▓▓▓▓▓▓▓
# ▓▓▓▓▓▓
# ▓▓▓▓▓
# ▓▓▓▓
# ▓▓▓
# ▓▓
# ▓

Misma función modificando algunos valores:

def visualizar(valor):
    if valor > 0:
        print('▒' * valor, valor * '▓')
        visualizar(valor-1)

visualizar(10)

# ▒▒▒▒▒▒▒▒▒▒ ▓▓▓▓▓▓▓▓▓▓
# ▒▒▒▒▒▒▒▒▒ ▓▓▓▓▓▓▓▓▓
# ▒▒▒▒▒▒▒▒ ▓▓▓▓▓▓▓▓
# ▒▒▒▒▒▒▒ ▓▓▓▓▓▓▓
# ▒▒▒▒▒▒ ▓▓▓▓▓▓
# ▒▒▒▒▒ ▓▓▓▓▓
# ▒▒▒▒ ▓▓▓▓
# ▒▒▒ ▓▓▓
# ▒▒ ▓▓
# ▒ ▓

Veamos ahora un ejemplo en el que visualizaremos una cadena de texto de forma recursiva:

Debemos tener en cuenta que restamos -1 a valor en dos ocasiones: solo cuando llamamos a la función mostrar_cadena desde dentro de la función, es para controlar la recursividad de nuestra función; cuando restamos imprimiendo en pantalla, es para poder recorrer hasta la posición 0 de nuestra cadena.

def mostrar_cadena(cadena, valor):
    if valor > 0:
        print(cadena[valor-1])
        mostrar_cadena(cadena, valor-1)


mi_cadena = 'Barbate'
valor = len(mi_cadena)
mostrar_cadena(mi_cadena, valor)

# e
# t
# a
# b
# r
# a
# B

Podemos jugar todo lo que nos apetezca con las funciones recursivas de Python, pero debemos tener muy en cuenta que una función recursiva mal diseñada puede generar un uso excesivo de nuestra memoria y procesador.

def mostrar_cadena(cadena, valor):
    if valor > 0:
        print(cadena[0:valor])
        mostrar_cadena(cadena, valor-1)


mi_cadena = 'Barbate'
valor = len(mi_cadena)
mostrar_cadena(mi_cadena, valor)

# Barbate
# Barbat
# Barba
# Barb
# Bar
# Ba
# B

Uno de los ejemplos típicos para ver el funcionamiento de las funciones recursivas en Python es crear una función para calcular el factorial de un número.

def calculo_factorial(numero):
    if numero == 0:
        return 1
    else:
        return numero * calculo_factorial(numero-1)


calculo_factorial(10)
# 3628800

Te dejo este enlace por si quieres ver algo más de información en Wikipedia sobre la palabra recursión.

Dejar un comentario

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