Una función recursiva es una forma de programar o codificar un problema, en el cual la función se llama a sí misma de manera directa o indirecta a través de otra función, por lo general devuelve el valor de retorno de dicha función.
Una función recursiva termina, si con cada llamada recursiva la solución del problema se reduce y se mueve hacia un caso base (un caso base es un caso en el que el problema se puede resolver sin recurrencia adicional).
Un ejemplo muy frecuente para demostrar el uso de la recursividad es implementando un factorial.
El factorial se representa con el signo ! después del número a encontrar el factorial, la exclamación significa que hay que multiplicar todos los números que hay entre dicho número y el 1.
Por ejemplo: El factorial de 5! = 5 x 4 x 3 x 2 x 1 = 120
En Python seria así:
Input
def factorial(n):
if n <= 1:
return 1
else:
return n * factorial(n-1)
num=int(input("Introduzca el factorial a encontrar: "))
resultado=factorial(num)
print("El factorial de ",num,"! es: ",resultado)
Output
Introduzca el factorial a encontrar: 5
El factorial de 5 ! es: 120
En este ejemplo la función factorial trabaja de la siguiente forma:
Cuando se hace el llamado a la función factorial este tiene dos casos, el básico y el complejo:
En el caso básico evalúa si el número es mayor o igual a 1, de cumplirse la condición factorial devuelve 1.
En el caso complejo se expresa el problema como el producto del número y la llamada recursiva del factorial que evalúa el factorial del número -1.
Otro ejemplo de recursividad es la sucesión de Fibonacci. Fibonacci es la sucesión infinita de números, esta sucesión comienza con los números 0 y 1, a partir de este cada número será la suma de dos anteriores, definiendo así la recurrencia.
Por ejemplo:
Input
def fibonacci(n):
a = 0
b = 1
while a < n:
print(a, end=" ")
c = a + b
a = b
b = c
print()
num=int(input("Introduzca el limite de la fibonacci: "))
fibonacci(num)
Output
Introduzca el limite de la fibonacci: 10
0 1 1 2 3 5 8
El ejemplo de Fibonacci trabaja de la siguiente forma, el va a imprimir los valores arrojados por la variable a en repetidas veces mientras la condición establecida sea verdadera, cuando verifique que a = n la condición pasará a falsa terminando la ejecución del programa.
Input
print("CALCULADORA BASICA|\n")
def sumar(num1, num2):
return num1+num2
def restar(num1, num2):
return num1-num2
def multiplicar(num1, num2):
return num1*num2
def dividir(num1, num2):
return num1/num2
def opciones(opc=0):
print("\nOpcion (1): Sumar")
print("Opcion (2): Restar")
print("Opcion (3): Multiplicar")
print("Opcion (4): Dividir\n")
opcion = int(input("Selecione una Opción: "))
return opcion
opc = opciones()
while (opc!="N"):
if(opc == 1):
print("\n Modulo de suma\n")
num1=int(input("Introduzca el primer digito: "))
num2=int(input("Introduzca el primer digito: "))
resultado= sumar(num1, num2)
print("\nEl resultado de la suma es: ", resultado)
opc = input("\n¿Desea realizar otra operacion? (S/N): ")
if(opc=="N"):
break
elif(opc=="S"):
opc = opciones()
if(opc == 2):
print("\n Modulo de resta\n")
num1=int(input("Introduzca el primer digito: "))
num2=int(input("Introduzca el primer digito: "))
resultado= restar(num1, num2)
print("\nEl resultado de la resta es: ", resultado)
opc = input("\n¿Desea realizar otra operacion? (S/N): ")
if(opc=="N"):
break
elif(opc=="S"):
opc = opciones()
if(opc == 3):
print("\n Modulo de multiplicacion\n")
num1=int(input("Introduzca el primer digito: "))
num2=int(input("Introduzca el primer digito: "))
resultado= multiplicar(num1, num2)
print("\nEl resultado de la multiplicacion es: ", resultado)
opc = input("\n¿Desea realizar otra operacion? (S/N): ")
if(opc=="N"):
break
elif(opc=="S"):
opc = opciones()
if(opc == 4):
print("\n Modulo de division\n")
num1=int(input("Introduzca el primer digito: "))
num2=int(input("Introduzca el primer digito: "))
resultado= dividir(num1, num2)
print("\nEl resultado de la division es: ", resultado)
opc = input("\n¿Desea realizar otra operacion? (S/N): ")
if(opc=="N"):
break
elif(opc=="S"):
opc = opciones()
print("\nGracias por usa la CALCULADORA BASICA")
Output
CALCULADORA BASICA|
Opcion (1): Sumar
Opcion (2): Restar
Opcion (3): Multiplicar
Opcion (4): Dividir
Selecione una Opción: 1
Modulo de suma
Introduzca el primer digito: 2
Introduzca el primer digito: 4
El resultado de la suma es: 6
¿Desea realizar otra operacion? (S/N): S
Opcion (1): Sumar
Opcion (2): Restar
Opcion (3): Multiplicar
Opcion (4): Dividir
Selecione una Opción: 2
Modulo de resta
Introduzca el primer digito: 5
Introduzca el primer digito: 9
El resultado de la resta es: -4
¿Desea realizar otra operacion? (S/N): S
Opcion (1): Sumar
Opcion (2): Restar
Opcion (3): Multiplicar
Opcion (4): Dividir
Selecione una Opción: 3
Modulo de multiplicacion
Introduzca el primer digito: 48
Introduzca el primer digito: 4
El resultado de la multiplicacion es: 192
¿Desea realizar otra operacion? (S/N): S
Opcion (1): Sumar
Opcion (2): Restar
Opcion (3): Multiplicar
Opcion (4): Dividir
Selecione una Opción: 4
Modulo de division
Introduzca el primer digito: 8
Introduzca el primer digito: 10
El resultado de la division es: 0.8
¿Desea realizar otra operacion? (S/N): N
Gracias por usa la CALCULADORA BASICA
Los invito a revisar este ejemplo práctico de funciones y vean que tal les va.
Input
print("PUESTO DE EMPANADAS\n")
def menu(opc = 0):
print("Te tengo:\n[1] Empanada : 400BsF\n[2] Malta: 200BsF\n[3] Refresco: 250BsF\n[4] Lo que me pidas\n")
opcion=int(input("¿Que se te antoja?\n"))
return opcion
def Empanadas():
print("Te tengo de carne mechada, carne molida, pollo, reina pepiada, jamon con queso y queso")
opc = input("\n¿Se te antoja una? (S/N): ")
if(opc=="S" or opc=="s"):
print("Una empanada para ti y mas dinero para mi")
return 1
elif(opc=="N" or opc =="n"):
print("Bueno, esta bien")
return 0
def Maltas():
print("Tengo malta de lata y botella")
opc = input("\n¿Se te antoja una? (S/N): ")
if(opc=="S" or opc=="s"):
print("Una malta para ti y mas dinero para mi")
return 1
elif(opc=="N" or opc =="n"):
print("Bueno, esta bien")
return 0
def Refrescos():
print("Te tengo de Coca-Cola, Pepsi-Cola, Kolita y SevenUp")
opc = input("\n¿Se te antoja una? (S/N): ")
if(opc=="S" or opc=="s"):
print("Un refresco para ti y mas dinero para mi")
return 1
elif(opc=="N" or opc =="n"):
print("Bueno, esta bien")
return 0
total1, total2, total3= 0, 0, 0
print("¡Bienvenido a mi puesto de VENDO EMPANADAS, MALTAS Y REFRESCOS donde vendo empanadas, maltas y refresco!\n")
opc = menu()
while opc != "N" or opc != "n":
if opc == 1:
print("Claro que empanadas, a todos les gustan las empanadas")
empanada = Empanadas()
total1 = total1 + empanada
opc = input("\n¿Deseas algo mas? (S/N): ")
if(opc=="N" or opc=="n"):
break
elif(opc=="S" or opc=="s"):
opc = menu()
if opc == 2:
print("¡Para calmar esa sed!")
malta = Maltas()
total2 = total2 + malta
opc = input("\n¿Deseas algo mas? (S/N): ")
if(opc=="N" or opc=="n"):
break
elif(opc=="S" or opc=="s"):
opc = menu()
if opc == 3:
print("¡Para calmar esa sed!")
refresco = Refrescos()
total3 = total3 + refresco
opc = input("\n¿Deseas algo mas? (S/N): ")
if(opc=="N" or opc=="n"):
break
elif(opc=="S" or opc=="s"):
opc = menu()
if opc == 4:
print("Epaaa es jodiendo, soy tipo serio")
opc = menu()
total = (total1 * 400) + (total2*200) + (total3*250)
if total>0:
print("Mira esto no es gratis, me debes: ",total)
print("Asi que me pagame mi dinero\n")
print("Chao vale")
else:
print("Pa la proxima te hago algo que te guste")
Output
PUESTO DE EMPANADAS
¡Bienvenido a mi puesto de VENDO EMPANADAS, MALTAS Y REFRESCOS donde vendo empanadas, maltas y refresco!
Te tengo:
[1] Empanada : 400BsF
[2] Malta: 200BsF
[3] Refresco: 250BsF
[4] Lo que me pidas
¿Que se te antoja?
1
Claro que empanadas, a todos les gustan las empanadas
Te tengo de carne mechada, carne molida, pollo, reina pepiada, jamon con queso y queso
¿Se te antoja una? (S/N): S
Una empanada para ti y mas dinero para mi
¿Deseas algo mas? (S/N): S
Te tengo:
[1] Empanada : 400BsF
[2] Malta: 200BsF
[3] Refresco: 250BsF
[4] Lo que me pidas
¿Que se te antoja?
1
Claro que empanadas, a todos les gustan las empanadas
Te tengo de carne mechada, carne molida, pollo, reina pepiada, jamon con queso y queso
¿Se te antoja una? (S/N): S
Una empanada para ti y mas dinero para mi
¿Deseas algo mas? (S/N): s
Te tengo:
[1] Empanada : 400BsF
[2] Malta: 200BsF
[3] Refresco: 250BsF
[4] Lo que me pidas
¿Que se te antoja?
2
¡Para calmar esa sed!
Tengo malta de lata y botella
¿Se te antoja una? (S/N): S
Una malta para ti y mas dinero para mi
¿Deseas algo mas? (S/N): N
Mira esto no es gratis, me debes: 1000
Asi que me pagame mi dinero
Chao vale
Este ejercicio me gustó mucho porque ponemos en práctica varias cosas que hemos visto a lo largo del tutorial, anímate a estudiarlo y entenderlo.
1 - Mejorando el primer Ejercicio Desafío: Vamos a mejorar el primer ejercicio desafío haciendo uso de las funciones.
Este ejercicio fue resuelto por @hendersonp. ¿Condiciones? Tratar de usar la mínima cantidad de líneas de código y aprovechar lo visto hasta ahora en el tutorial. Recompensa 1SBD
Post con los datos del ejercicio
Ejercicio Desafio 1.py
2 - Mejorando el segundo Ejercicio Desafío: Vamos a implementar el ordenamiento de mayor a menor haciendo uso de las funciones y añadiremos el ordenamiento de menor a mayor, es decir, después de ingresar los números estos se tienen que mostrar por pantalla de mayor a menor y de menor a mayor.
Este ejercicio fue resuelto por @rafaelaquino ¿Condiciones? Tratar de usar la mínima cantidad de líneas de código, ahora tenemos que ordenar 4 números y aprovechar lo visto hasta ahora en el tutorial. Recompensa 0.5SBD
Post con los datos del ejercicio
Ejercicio Desafio 1.py
3 - Mejorar la Calculadora: Vamos a añadirle a nuestra calculadora básica las funciones de potencia, raíz y otras que la persona considere que debe tener la calculadora.
¿Condiciones? Tratar de usar la mínima cantidad de líneas de código y aprovechar lo visto hasta ahora en el tutorial. Recompensa 0.25SBD
Gracias por permitirme robar unos pocos minutos de tu vida. Me despido por los momentos mis lectores, que tengan un excelente día, tarde o noche.
╭════════════╮
Sígueme en mi Blog
╰════════════╯