de funciones en los planos cartesianos, ver sección para graficas usan las librerías matplotlib: https://matplotlib.org/
import matplotlib.pyplot as plt
Existen algunas versiones empaquetadas de Python que permiten disponer de las librerías científicas preinstaladas. El proceso de instalación es simplificado y se encuentra en la sección WinPython (portable)
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 atrás, empezando desde la respuesta conocida de 1! =1 y reemplazando los valores en las operaciones que esperaban por resolver:
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
Sin embargo, hay que considerar que la recursividad se usa con precaución, pues las llamadas generan otra instancia que puede saturar la capacidad del computador.
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.
Se dispone de una lista de la estatura de los estudiantes de una escuela, que para formar fila se requiere ordenar en forma ascendente.
X = [85,75,65,80]
La primera acción a realizar es ubicar al estudiante de menor estatura en la primera posición en la fila. Se puede realizar comparando la estatura X[i], i=0, con las estaturas X[j], j=1, de cada estudiante que se encuentra detrás de él.
X = [85,75,65,80]
i j
Si el estudiante estudiante j es de menor estatura, deberá ocupar la posición primera i, asegurando que al menos hasta donde se ha revisado.
X = [75,85,65,80] # se intercambia
i j
Se debe intercambiar los valores entre las posiciones i vs j. El intercambio de posiciones lleva tres pasos:
– primero se aparta al estudiante de la posicion i
– segundo se mueve al estudiante de la posición j para ocupar la posición i
– tercero, es estudiante que se apartó, se le pide que ocupe la posición del estudiante j.
quedando la lista como la mostrada en el ejemplo anterior. Este paso es semejante a una burbuja que «asciende».
if X[j]<X[i]: #intercambia i con j
aparta = X[i]
X[i] = X[j]
X[j] = aparta
Se repite el proceso entre las posiciones i vs j+1, hasta llegar al último estudiante, asegurando que al menos en la posición i, se encuentre el estudiante de menor estatura.
X = [75,85,65,80]
i j
X = [65,85,75,80] # se intercambia
i j
X = [65,85,75,80] # no es necesario el intercambio
i j
Se procede a realizar el análisis con el estudiante i+1, para todos los que se encuentren detras de él, pues todos los anteriores tienen menor estatura.
X = [65,85,75,80] # no es necesario el intercambio
i j -->
Instrucciones en Python
# Ordena ascendente, # método de la burbuja, Bubble sort# INGRESO
X = [75,85,65,80]
# PROCEDIMIENTO
n = len(X)
i = 0 # primero de la listawhile i<(n-1): # hasta penúltimo
j = i+1 # siguiente de iwhile j<n: # hasta el últimoif X[j]<X[i]: #intercambia i con j
aparta = X[i]
X[i] = X[j]
X[j] = aparta
j = j + 1
i = i + 1
# SALIDAprint(X)
Tarea: Realizar el algoritmo para ordenar en forma descendente.
Referencias: Obama recuerda aún el algoritmo de Bubble Sort. Dan Siroker (2013)
Los algoritmos que se reutilizan y se convierten a funciones, se pueden agrupar en un archivo.py. Esto permite crear un archivo como librerías con funciones personalizadas.
Las librerías se pueden llamar por la instrucción import y se usan individualmente por el nombre de la función().
Ejemplo – archivo de librerías personalizadas
Para le ejemplo se crean dos funciones sumando(a,b) e invierteletras(palabra) en un solo archivo politoESPOL.py, en directorio de trabajo:
# ejemplo de libreria de funcionesdefsumando(a,b):
c = a + b
return(c)
definvierteletras(palabra):
n = len(palabra)
invertida = ''for i inrange(0,n,1):
invertida = palabra[i] + invertida
return(invertida)
Archivo de programa principal politoProgram.py que lo va a usar en el mismo directorio de trabajo donde se encuentra el archivo politoESPOL.py,de las funciones anteriores. Esta ubicación permite realizar la llamada import politoESPOL as espol.
Ejercicios resueltos sobre Funciones() definidas por el usuario. Los ejemplos presentados, requieren que el usuario desarrolle el algoritmo como una función acorde a las estructuras de programación.
Cuando un algoritmo se usa de forma frecuente, en lugar de repetir las instrucciones cada vez que se necesitan, se pueden resumir y extraer en un bloque o sección dedicada independiente del resto denominada función.
Si cada algoritmo sigue la «estructura básica», la función es un bloque de procedimiento que se podrá reutilizar en cualquier otro problema y trabaja de forma «modular».
El bloque o función() se identifica con un nombre, que será el nombre de la función
y usa las variables de entrada (a) y variable de salida (z).
En programación estructurada, al cambiarse los bloques de entrada (input) y los bloques de salida (print), las instrucciones de entrada y salida se las mantiene dentro del programa principal que hace la llamada a las funciones.
La definición de una función en Python se escribe como:
deffuncion(entrada):
# intrucciones
# detalladas de la funcion
return(respuesta)
Definida la función se puede usar una o varias veces en un programa principal usando el nombre de la función junto a la variable de entrada.
El resultado de la función se asigna a una variable que es usada dentro del programa principal.
resultado = funcion(entrada)
Se pueden hacer tantas llamadas a la función como sean necesarias.
Las funciones se pueden realizar usando variables tipo escalar (enteras, reales), vectoriales o matriciales, tipo texto o cadena de caracteres, etc.
Las variables escalares se declaran como variables internas a la función, mientras que las variables vectoriales o matriciales tienen un alcance global.
Referencia: Rodriguez 6.1 p155, Van Rossum p19
Variables dentro de una función
Las variables dentro de una función se tratan como variables de un algoritmo aparte.Por lo que los nombres de las variables internas, no afectan a las variables del algoritmo principal.
Exceptuando el caso de Arreglos y listas que el paso es por «referencia» (o álias), pues se considera que si las matrices y vectores del problema son de gran tamaño, crear copias de cada una de ellas dentro de cada llamada a la función ocupa memoria que podría ser usada para otras tareas.
Estructura del Algoritmo con funciones creadas por usuario
Cuando el algoritmo tiene funciones básicas creadas por usted, y son relativamente «pequeñas», se incluyen dentro del bloque de inicio.
# INICIO# Referencia del problemaimport numpy as np
import random as np
# funciones creadas por usuariodefmiprimerafuncion(variableentrada,otravariable):
# algunas instruccionesreturn(respuesta)
# INGRESO
a = int(input(' un numero entero'))
b = float(input(' un numero real'))
# PROCEDIMIENTO
respuesta = miprimerafuncion(a,b)
# SALIDAprint('alguna respuesta: ',respuesta)
Si las funciones son varias o siempre usa esas funciones las puede incluir en un archivo .py y llamarlas desde el archivo con el algoritmo principal. Detalles en el siguiente tema publicado.