Recursión Notas de Programación Curso de Nivelación de Algoritmos Clase 4 Lic. Ernesto Mislej [email protected]Maestría y Carrera de Especialización en Explotación de Datos y Descubrimiento de Conocimiento 23 de marzo de 2008 Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Maestría y Carrera de Especialización en Explotación de Datos y Descubrimientode Conocimiento
23 de marzo de 2008
Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
RecursiónNotas de Programación
Recursión
EjemploSe tiene un almacén lleno de autopartes. Se quiere saber el preciode los productos, pero sólo se tiene una tabla de precios de partes ycómo se fabrican los productos.
Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
RecursiónNotas de Programación
Recursión
Ejemplo
I El producto #13 está compuesto por las partes #8, #3 y #2.I A su vez, la parte #8 está compuesta por otra parte #2 y la
parte #9.I La parte #9 está compuesta por 3 partes #3.I La parte #3 vale $1 y la parte #2 vale $4.
I ¿Cuánto vale el producto #13?I ¿Es posible encontrar un algoritmo para encontrar el precio de
un producto?
Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
RecursiónNotas de Programación
Recursión
Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
RecursiónNotas de Programación
Recursión
Input: Un producto eOutput: El precio del producto e
Precio (e) ←if e no está compuesto de otras partes then
return Costo(e);else
a ← 0;forall p ∈ Partes(e) do
a ← a + Precio(p);endreturn a;
end
Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
RecursiónNotas de Programación
Recursión
Ejemplo
I Escribir en forma recursiva la función factorial.I Escribir la serie Fibonacci
F (0) = 0F (1) = 1F (n) = F (n − 1) + F (n − 2)
I Implementen esta serie recursiva:
M(n) =
{n − 10, if n > 100
M(M(n + 11)), if n ≤ 100
Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
RecursiónNotas de Programación
Recursión
>>> # Definición recursiva>>> def fibo(n):... if n < 2:... return n... else:... return fibo(n-1) + fibo(n-2)...>>> fibo(0)0>>> fibo(1)1>>> fibo(8)21
Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
RecursiónNotas de Programación
Recursión
I Dividir el problema en sub-problemas del mismo tipo.I Las funciones recursivas cuentan de:
I Caso Base: Uno o más casos ya definidos.I Llamada Recursiva: Reglas para descender al Caso Base.
I Existen mecanismos para pasar de un esquema recursivo a unesquema iterativo.
I Los más complejos utilizan Pilas para almacenar las llamadasrecursivas.
Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
RecursiónNotas de Programación
Recursión
Ejemplo
I Calcular el mínimo común múltiplo de 2 números.I Escribir en forma recursiva el algoritmo de MergeSort.I Cual es la menor cantidad de monedas, de valor
{1, 5, 10, 25, 50} para dar un vuelto de 99 centavos.
Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
RecursiónNotas de Programación
Más sobre listas
>>> # Más sobre listas>>> a = [1,2,3,5,6,7,9]>>> 4 in a0>>> 5 in a1>>> 4 not in a1
>>> b = ["hola", "chau"]>>> a + b[1, 2, 3, 5, 6, 7, 9, ’hola’, ’chau’]
Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
RecursiónNotas de Programación
Más sobre listas
>>> # Más sobre listas>>> a = [1,2,3,5,6,7,9]>>> a * 2[1, 2, 3, 5, 6, 7, 9, 1, 2, 3, 5, 6, 7, 9]>>> 2 * a[1, 2, 3, 5, 6, 7, 9, 1, 2, 3, 5, 6, 7, 9]
>>> len(a)7>>> min(a)1>>> max(a)9
Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
RecursiónNotas de Programación
String Methods
count (sub[, start[, end]])Devuelve el número de ocurrencias del substring sub en el stringS[start:end].
find (sub[, start[, end]])Devuelve el índice correspondiente a la primera ocurrencia delsubstring sub en el string S[start:end]. Devuelve -1 si sub no esencontrada.
index (sub[, start[, end]])Como find(), pero da un raise ValueError cuando el sub no esencontrada.
join (seq)Devuelve un string correspondiente a la concatenación de strings enla lista seq. Usando como separador al propio string .
split ([sep [,maxsplit]])Devuelve una lista de strings usando a sep como separador. maxsplitse puede utilizar para fijar la cantidad máxima de separaciones.
Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
RecursiónNotas de Programación
String Methods
>>> a = "Los algoritmos me aburren"
>>> a.count("o")3>>> a.count("c")0
>>> a.find("s")2>>> a.find("s", 3)13>>> a[13]’s’
Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
File "<interactive input>", line 1, in ?ValueError: substring not found in string.index
Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
RecursiónNotas de Programación
String Methods
>>> a = "Los algoritmos me aburricionan">>> a.split(" ")[’Los’, ’algoritmos’, ’me’, ’aburricionan’]
>>> b = a.split(" ")>>> ";".join(b)’Los;algoritmos;me;aburricionan’>>> " <> ".join(b)’Los <> algoritmos <> me <> aburricionan’
Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
RecursiónNotas de Programación
File Object
file (filename[, mode[, bufsize]])Devuelve un objeto file. El argumento filename es elnombre del archivo a ser abierto/creado. Los modos’r’, ’w’ y ’a’ abre el archivo para lectura,escritura(trunca) y agregado, respectivamente.
open ()Es un alias de la función file.
close ()Cierra el archivo.
read ([size])Lee (al menos tantos) size bytes del archivo.
readline ([size])Lee una línea entera del archivo.
Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
RecursiónNotas de Programación
File Object
Supongamos que existe el archivo iris.data con esta pinta: