5.1.3 Funciones – Archivos de librerias

Los algoritmos que se reutilizan y se convierten a funciones, se pueden agrupar en un archivo.py

Esto permite realizar un archivo de librerias de funciones personalizadas.

Las librerias se pueden llamar por la instrucción import y se usan individualmente por el nombre de la función.

Ejemplo

Archivo de funciones personalizadas politoESPOL.py, en directorio de trabajo:

# ejemplo de libreria de funciones

def sumando(a,b):
    c = a + b
    return(c)

def invierteletras(palabra):
    n = len(palabra)
    invertida = ''
    for i in range(0,n,1):
        invertida = palabra[i] + invertida
    return(invertida)

Archivo de programa principal politoProgram.py en el mismo directorio que el archivo de funciones.

# probando importar funciones
import politoESPOL as espol

# INGRESO
a = 3
b = 5
palabra = 'polito'

# PROCEDIMIENTO
sumado = espol.sumando(a,b)
alreves = espol.invierteletras(palabra)

# SALIDA
print('la suma es: ', sumado)
print('palabra invertida: ',alreves)

Resultado del algoritmo

la suma es:  8
palabra invertida:  otilop
>>> 

8.1.1 Menú – Ejemplos

3Eva_IIT2009_T2 Registrar alquiler de casilleros

Solución propuesta: s3Eva_IIT2009_T2 Registrar alquiler de casilleros

2Eva_IIT2009_T3 Controlar saldos prepago

Solución propuesta: s2Eva_IIT2009_T3 Controlar saldos prepago

2Eva_IIT2015_T4 biciespol, prestamos de bicicletas

Solución propuesta: s2Eva_IIT2015_T4 biciespol, prestamos de bicicletas

2Eva_IT2006_T1 Donaciones defensa civil

Solución propuesta: s2Eva_IT2006_T1 Donaciones defensa civil

3Eva_IIT2015_T1 Mensajes en redes sociales y etiquetas

Solución propuesta: s3Eva_IIT2015_T1 Mensajes en redes sociales y etiquetas

3Eva_IIT2015_T2 Gestionar mensajes con etiquetas

Solución propuesta: s3Eva_IIT2015_T2 Gestionar mensajes con etiquetas

5.3 Funciones Recursivas

Referencia: Rodriguez 6.0 p168

Una función recursiva conocida, definida en la matemática es el factorial. El factorial tiene la característica que se puede llamar a si misma.

5! = 5x4!
       4! = 4x3!
              3! = 3x2!
                     2! = 2x1!
           por definición   1! = 1

Se interpreta que para encontrar 5! requerimos la respuesta de 4!.
Para encontrar 4! se debe calcular 3! y así sucesivamente,
hasta llegar al valor inicial de la función que es 1!=1

La solución se interpreta  hacia atras,  empezando desde la respuesta conocida de 1! =1 y reemplazando los valores en las operaciones que estaban por resolverse:

5! = 5x4! = 5x24 = 120
       4! = 4x3! = 4x6 = 24
              3! = 3x2! = 3x2 = 6
                     2! = 2x1! = 2x1 =2
           por definición   1! = 1

Observamos que la función recursiva tiene valores iniciales, que se llama a si misma, y de forma matemática tiene una forma elegante de escribirse:

n! = \begin{cases} 1 && n=1 \\ n(n-1)! && n>1\end{cases}

Escribir la función recursiva en un algoritmo consiste en transcribir paso a paso lo descrito en forma matemática.

# factorial en forma recursiva

def factorial(n):
    if n==1:
        resultado = 1
    if n>1:
        resultado = n*factorial(n-1)
    return(resultado)

una vez que se ejecuta el algoritmo para que esté disponible en memoria, se usa llamando a la función

>>> factorial(5)
120
>>> factorial(1)
1
>>> factorial(4)
24
>>> 

Existen otras funciones recursivas en matemáticas que se pueden fácilmente convertir a algoritmos como Fibonacci, Padovan,  incluso algunas que funcionan en parejas como Par e impar. Se muestran algunas en la sección de ejemplos.

Observaciones de uso

Sín embargo hay que considerar que la recursión se usa con precaución, pues las llamadas generan otra instancia que puede saturar la capacidad del computador.

Matrioshka. Muñeca tradicional rusa, hueca con más muñecas en su interior.

En el ejemplo se observa que se tienen operaciones en espera de resultados de la siguiente respuesta, cada llamada usa memoria, tiempo de cómputo como recursos.

Por ejemplo, al intentar de obtener factorial(1000) en forma recursiva, se obtiene un error "RecursionError: maximum recursion depth exceeded in comparison".

Los lenguajes de programación tienen como límite máximo de llamadas recursivas, para evitar saturar los recursos disponibles de memoria y tiempo computacional.


Ejemplos

2Eva_IIT2007_T4 Fibonacci recursiva

Solución propueta: Sol_py

2Eva_IT2007_T1 Funciones par e impar recursivas

Solución Propuesta: Sol_py

3Eva_IT2004_T3 Multiplicar con campesino egipcio

Solución Propuesta: Sol_py


Ejercicios

2Eva_IT2005_T2 Calcular potencia recursiva

2Eva_IIT2012_T1 Recursiva Multi

5.1.2 Funciones – Ejercicios

Funciones Numéricas

2Eva_IT2014_T2 Función color RGB a gris

2Eva_IIT2011_T1 Algoritmo de Euclides MCD

2Eva_IIT2013_T3 Encriptar binarios con XOR

2Eva_IT2003_T1 Funciones promedio, mayor y menor

2daEva_IIT2004_T3 Reciclar vasos


Funciones con cadenas de caracteres

2Eva_IIT2009_T1 Mensaje a SMS

2Eva_IIT2014_T3 Palabras monovocalicas en frase

2Eva_IIT2015_T1 función lipovocal(frase)

2Eva_IT2006_T3 Encriptar a Morse

2Eva_IT2009_T1 Desordenar una palabra

2Eva_IT2014_T1 Palabras con eco