SlideShare una empresa de Scribd logo
1 de 21
Descargar para leer sin conexión
Recursión
                  Notas de Programación




            Curso de Nivelación de Algoritmos
                                      Clase 4


                            Lic. Ernesto Mislej
                           emislej@dc.uba.ar

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
Recursión
                    Notas de Programación


Recursión




   Ejemplo
   Se tiene un almacén lleno de autopartes. Se quiere saber el precio
   de los productos, pero sólo se tiene una tabla de precios de partes y
   cómo se fabrican los productos.




                        Lic. Ernesto Mislej   Curso de Nivelación de Algoritmos
Recursión
                  Notas de Programación


Recursión


   Ejemplo
      El producto #13 está compuesto por las partes #8, #3 y #2.
      A su vez, la parte #8 está compuesta por otra parte #2 y la
      parte #9.
      La parte #9 está compuesta por 3 partes #3.
      La parte #3 vale $1 y la parte #2 vale $4.

      ¿Cuánto vale el producto #13?
      ¿Es posible encontrar un algoritmo para encontrar el precio de
      un producto?



                      Lic. Ernesto Mislej   Curso de Nivelación de Algoritmos
Recursión
            Notas de Programación


Recursión




                Lic. Ernesto Mislej   Curso de Nivelación de Algoritmos
Recursión
                   Notas de Programación


Recursión

   Input: Un producto e
   Output: 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);
       end
       return a;
   end



                       Lic. Ernesto Mislej   Curso de Nivelación de Algoritmos
Recursión
                  Notas de Programación


Recursión


   Ejemplo
      Escribir en forma recursiva la función factorial.
      Escribir la serie Fibonacci
      F (0) = 0
      F (1) = 1
      F (n) = F (n − 1) + F (n − 2)

      Implementen esta serie recursiva:
                   n − 10,        if n > 100
      M(n) =
               M(M(n + 11)), if n ≤ 100




                      Lic. Ernesto Mislej   Curso de Nivelación de Algoritmos
Recursión
                   Notas 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ón
                   Notas de Programación


Recursión



      Dividir el problema en sub-problemas del mismo tipo.
      Las funciones recursivas cuentan de:
            Caso Base: Uno o más casos ya definidos.
            Llamada Recursiva: Reglas para descender al Caso Base.
      Existen mecanismos para pasar de un esquema recursivo a un
      esquema iterativo.
      Los más complejos utilizan Pilas para almacenar las llamadas
      recursivas.




                       Lic. Ernesto Mislej   Curso de Nivelación de Algoritmos
Recursión
                  Notas de Programación


Recursión




   Ejemplo
      Calcular el mínimo común múltiplo de 2 números.
      Escribir en forma recursiva el algoritmo de MergeSort.
      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ón
                   Notas de Programación


Más sobre listas

   >>>   # Más sobre listas
   >>>   a = [1,2,3,5,6,7,9]
   >>>   4 in a
   0
   >>>   5 in a
   1
   >>>   4 not in a
   1

   >>> b = ["hola", "chau"]
   >>> a + b
   [1, 2, 3, 5, 6, 7, 9, ’hola’, ’chau’]


                       Lic. Ernesto Mislej   Curso de Nivelación de Algoritmos
Recursión
                   Notas 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ón
                   Notas de Programación


String Methods

        count (sub[, start[, end]])
              Devuelve el número de ocurrencias del substring sub en el string
              S[start:end].
          find (sub[, start[, end]])
              Devuelve el índice correspondiente a la primera ocurrencia del
              substring sub en el string S[start:end]. Devuelve -1 si sub no es
              encontrada.
         index (sub[, start[, end]])
               Como find(), pero da un raise ValueError cuando el sub no es
               encontrada.
          join (seq)
               Devuelve un string correspondiente a la concatenación de strings en
               la lista seq. Usando como separador al propio string .
         split ([sep [,maxsplit]])
               Devuelve una lista de strings usando a sep como separador. maxsplit
               se puede utilizar para fijar la cantidad máxima de separaciones.



                       Lic. Ernesto Mislej   Curso de Nivelación de Algoritmos
Recursión
                 Notas 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
Recursión
                 Notas de Programación


String Methods


   >>> a = "Los algoritmos me aburricionan"

   >>> a.find("d")
   -1

   >>> a.index("d")
   Traceback (most recent call last):
     File "<interactive input>", line 1, in ?
   ValueError: substring not found in string.index




                     Lic. Ernesto Mislej   Curso de Nivelación de Algoritmos
Recursión
                 Notas 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ón
                     Notas de Programación


File Object

              file (filename[, mode[, bufsize]])
                  Devuelve un objeto file. El argumento filename es el
                  nombre 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ón
                    Notas de Programación


File Object


   Supongamos que existe el archivo iris.data con esta pinta:

   6.7,3.0,5.2,2.3,Iris-virginica.
   6.0,2.2,5.0,1.5,Iris-virginica.
   6.2,2.8,4.8,1.8,Iris-virginica.
   7.7,3.8,6.7,2.2,Iris-virginica.
   7.2,3.0,5.8,1.6,Iris-virginica.
   5.5,2.4,3.8,1.1,Iris-versicolor.
   6.0,2.7,5.1,1.6,Iris-versicolor.
   5.5,2.5,4.0,1.3,Iris-versicolor.
   ...



                        Lic. Ernesto Mislej   Curso de Nivelación de Algoritmos
Recursión
                Notas de Programación


File Object


   >>> f = open ("H:facuiris.data", "r")

   >>> l = f.readline()
   >>> l
   ’6.7,3.0,5.2,2.3,Iris-virginica.n’

   >>> l = f.readline()
   >>> l
   ’6.0,2.2,5.0,1.5,Iris-virginica.n’
   >>>




                    Lic. Ernesto Mislej   Curso de Nivelación de Algoritmos
Recursión
                     Notas de Programación


File Object
   >>> f.seek(0) #rebobina el archivo

   >>> l = f.readline()
   >>> l
   ’6.7,3.0,5.2,2.3,Iris-virginica.n’

   >>> while l: #Mientras existan líneas
   ...     a = l.split(",")[0]
   ...     print a
   ...     l = f.readline()
   ...
   6.7
   6.0
   6.2
   7.7
   7.2
   5.5...

   >>> l
   ’’


                         Lic. Ernesto Mislej   Curso de Nivelación de Algoritmos
Recursión
                        Notas de Programación


File Object
   >>> #Si quiero sumar la primera columna

   >>> f.seek(0) #rebobina el archivo

   >>> a = 0

   >>> l = f.readline()
   >>> while l:
   ...      a = a + float(l.split(",")[0])
   ...      print a
   ...      l = f.readline()
   ...
   6.7
   12.7
   18.9
   26.6
   33.8...

   >>> a
   876.50000000000045


                            Lic. Ernesto Mislej   Curso de Nivelación de Algoritmos
Recursión
                     Notas de Programación


File Object


   >>> #Si crear un file con las primeras 2 columnas
   >>> #separados por ";"

   >>> f.seek(0) #rebobina el archivo
   >>> g = open("H:facuiris2.data", "w")

   >>> l = f.readline()
   >>> while l:
   ...      a = l.split(",")[0:2]
   ...      g.write (" ; ".join(a) + "n")
   ...      l = f.readline()
   ...

   >>> g.close()
   >>> f.close()




                         Lic. Ernesto Mislej   Curso de Nivelación de Algoritmos

Más contenido relacionado

La actualidad más candente

Suma de imagenes
Suma de imagenesSuma de imagenes
Suma de imagenesanar26
 
Apuntesmatlab
ApuntesmatlabApuntesmatlab
Apuntesmatlabford81
 
Logica de la Programación Problemas y Soluciones
Logica de la  Programación  Problemas y SolucionesLogica de la  Programación  Problemas y Soluciones
Logica de la Programación Problemas y SolucionesVideoconferencias UTPL
 
Lo básico para programar
Lo básico para programarLo básico para programar
Lo básico para programarCelestino Duran
 
18 tipos-de-datos
18 tipos-de-datos18 tipos-de-datos
18 tipos-de-datosAndy T
 
Lo básico para programar
Lo básico para programarLo básico para programar
Lo básico para programarCelestino Duran
 
IC - Estructuras de Secuencia - Ejercicios
IC - Estructuras de Secuencia - EjerciciosIC - Estructuras de Secuencia - Ejercicios
IC - Estructuras de Secuencia - Ejercicioscbertolotti
 
Modulo 1- Curso de Estructura (Struct)
Modulo 1- Curso de Estructura (Struct)Modulo 1- Curso de Estructura (Struct)
Modulo 1- Curso de Estructura (Struct)Ing. Saulo Aizprua
 
Algoritmos, lenguajes de programación, datos, tipos de datos y datos primitivos.
Algoritmos, lenguajes de programación, datos, tipos de datos y datos primitivos.Algoritmos, lenguajes de programación, datos, tipos de datos y datos primitivos.
Algoritmos, lenguajes de programación, datos, tipos de datos y datos primitivos.yoly1parra1
 
IC estructuras de secuencia
IC estructuras de secuenciaIC estructuras de secuencia
IC estructuras de secuenciacbertolotti
 
Tipos de datos, identificadores, variables y constantes 97 2003
Tipos de datos, identificadores, variables y constantes 97 2003Tipos de datos, identificadores, variables y constantes 97 2003
Tipos de datos, identificadores, variables y constantes 97 2003Joseluis Cruz Ramirez
 
Tipos de datos, identificadores, variables y constantes
Tipos de datos, identificadores,  variables y constantesTipos de datos, identificadores,  variables y constantes
Tipos de datos, identificadores, variables y constantesIEO Santo Tomás
 

La actualidad más candente (20)

Suma de imagenes
Suma de imagenesSuma de imagenes
Suma de imagenes
 
Conceptos de algoritmos
Conceptos de algoritmosConceptos de algoritmos
Conceptos de algoritmos
 
Victorleyva eje 4_actividad1
Victorleyva eje 4_actividad1Victorleyva eje 4_actividad1
Victorleyva eje 4_actividad1
 
Laboratorio#4
Laboratorio#4Laboratorio#4
Laboratorio#4
 
Apuntesmatlab
ApuntesmatlabApuntesmatlab
Apuntesmatlab
 
Tipos algoritmos
Tipos algoritmosTipos algoritmos
Tipos algoritmos
 
Logica de la Programación Problemas y Soluciones
Logica de la  Programación  Problemas y SolucionesLogica de la  Programación  Problemas y Soluciones
Logica de la Programación Problemas y Soluciones
 
Lo básico para programar
Lo básico para programarLo básico para programar
Lo básico para programar
 
18 tipos-de-datos
18 tipos-de-datos18 tipos-de-datos
18 tipos-de-datos
 
Lo básico para programar
Lo básico para programarLo básico para programar
Lo básico para programar
 
IC - Estructuras de Secuencia - Ejercicios
IC - Estructuras de Secuencia - EjerciciosIC - Estructuras de Secuencia - Ejercicios
IC - Estructuras de Secuencia - Ejercicios
 
Matlabreyes
MatlabreyesMatlabreyes
Matlabreyes
 
Modulo 1- Curso de Estructura (Struct)
Modulo 1- Curso de Estructura (Struct)Modulo 1- Curso de Estructura (Struct)
Modulo 1- Curso de Estructura (Struct)
 
Algoritmos, lenguajes de programación, datos, tipos de datos y datos primitivos.
Algoritmos, lenguajes de programación, datos, tipos de datos y datos primitivos.Algoritmos, lenguajes de programación, datos, tipos de datos y datos primitivos.
Algoritmos, lenguajes de programación, datos, tipos de datos y datos primitivos.
 
IC estructuras de secuencia
IC estructuras de secuenciaIC estructuras de secuencia
IC estructuras de secuencia
 
Tipos de datos variables expresiones
Tipos de datos variables expresionesTipos de datos variables expresiones
Tipos de datos variables expresiones
 
Tipos de datos, identificadores, variables y constantes 97 2003
Tipos de datos, identificadores, variables y constantes 97 2003Tipos de datos, identificadores, variables y constantes 97 2003
Tipos de datos, identificadores, variables y constantes 97 2003
 
Tipos de datos, identificadores, variables y constantes
Tipos de datos, identificadores,  variables y constantesTipos de datos, identificadores,  variables y constantes
Tipos de datos, identificadores, variables y constantes
 
Tutorial rapido de octave
Tutorial rapido de octaveTutorial rapido de octave
Tutorial rapido de octave
 
Apuntes scilab
Apuntes scilabApuntes scilab
Apuntes scilab
 

Destacado

Tópicos de Big Data - Introducción
Tópicos de Big Data - IntroducciónTópicos de Big Data - Introducción
Tópicos de Big Data - IntroducciónErnesto Mislej
 
Tópicos de Big Data - Sistemas de Recomendación
Tópicos de Big Data - Sistemas de RecomendaciónTópicos de Big Data - Sistemas de Recomendación
Tópicos de Big Data - Sistemas de RecomendaciónErnesto Mislej
 
Tópicos de Big Data - Link Analysis
Tópicos de Big Data - Link AnalysisTópicos de Big Data - Link Analysis
Tópicos de Big Data - Link AnalysisErnesto Mislej
 
Innovación en Big Data
Innovación en Big DataInnovación en Big Data
Innovación en Big DataErnesto Mislej
 
Tópicos de Big Data - Items Similares
Tópicos de Big Data - Items SimilaresTópicos de Big Data - Items Similares
Tópicos de Big Data - Items SimilaresErnesto Mislej
 
Data Science & Big Data
Data Science & Big DataData Science & Big Data
Data Science & Big DataErnesto Mislej
 
A quienes les gustó esta charla también les gustó... Cómo los Sistemas de Rec...
A quienes les gustó esta charla también les gustó... Cómo los Sistemas de Rec...A quienes les gustó esta charla también les gustó... Cómo los Sistemas de Rec...
A quienes les gustó esta charla también les gustó... Cómo los Sistemas de Rec...Ernesto Mislej
 
Opinion Mining #datafestAr
Opinion Mining #datafestArOpinion Mining #datafestAr
Opinion Mining #datafestArErnesto Mislej
 
Diseño con algoritmos genéticos
Diseño con algoritmos genéticosDiseño con algoritmos genéticos
Diseño con algoritmos genéticosMilanxD
 
Algoritmos recursivos
Algoritmos recursivosAlgoritmos recursivos
Algoritmos recursivosfeytho
 
Programacion lenguaje-c
Programacion lenguaje-cProgramacion lenguaje-c
Programacion lenguaje-cClariza
 
Inserción,borrado y búsqueda en Arboles Binarios(Java)
Inserción,borrado y búsqueda en Arboles Binarios(Java)Inserción,borrado y búsqueda en Arboles Binarios(Java)
Inserción,borrado y búsqueda en Arboles Binarios(Java)Stalin Eduardo Tusa Vitar
 

Destacado (20)

Tópicos de Big Data - Introducción
Tópicos de Big Data - IntroducciónTópicos de Big Data - Introducción
Tópicos de Big Data - Introducción
 
Tópicos de Big Data - Sistemas de Recomendación
Tópicos de Big Data - Sistemas de RecomendaciónTópicos de Big Data - Sistemas de Recomendación
Tópicos de Big Data - Sistemas de Recomendación
 
Tópicos de Big Data - Link Analysis
Tópicos de Big Data - Link AnalysisTópicos de Big Data - Link Analysis
Tópicos de Big Data - Link Analysis
 
Innovación en Big Data
Innovación en Big DataInnovación en Big Data
Innovación en Big Data
 
Tópicos de Big Data - Items Similares
Tópicos de Big Data - Items SimilaresTópicos de Big Data - Items Similares
Tópicos de Big Data - Items Similares
 
Data Science & Big Data
Data Science & Big DataData Science & Big Data
Data Science & Big Data
 
Diseño de algoritmo - Programación I
Diseño de algoritmo - Programación IDiseño de algoritmo - Programación I
Diseño de algoritmo - Programación I
 
Clase1
Clase1Clase1
Clase1
 
Estructura de datos y recursión
Estructura de datos y recursiónEstructura de datos y recursión
Estructura de datos y recursión
 
Opinion Mining
Opinion MiningOpinion Mining
Opinion Mining
 
Programación
ProgramaciónProgramación
Programación
 
Metales
MetalesMetales
Metales
 
A quienes les gustó esta charla también les gustó... Cómo los Sistemas de Rec...
A quienes les gustó esta charla también les gustó... Cómo los Sistemas de Rec...A quienes les gustó esta charla también les gustó... Cómo los Sistemas de Rec...
A quienes les gustó esta charla también les gustó... Cómo los Sistemas de Rec...
 
Opinion Mining #datafestAr
Opinion Mining #datafestArOpinion Mining #datafestAr
Opinion Mining #datafestAr
 
Diseño con algoritmos genéticos
Diseño con algoritmos genéticosDiseño con algoritmos genéticos
Diseño con algoritmos genéticos
 
Algoritmos recursivos
Algoritmos recursivosAlgoritmos recursivos
Algoritmos recursivos
 
Programacion lenguaje-c
Programacion lenguaje-cProgramacion lenguaje-c
Programacion lenguaje-c
 
Heap sort
Heap sortHeap sort
Heap sort
 
Inserción,borrado y búsqueda en Arboles Binarios(Java)
Inserción,borrado y búsqueda en Arboles Binarios(Java)Inserción,borrado y búsqueda en Arboles Binarios(Java)
Inserción,borrado y búsqueda en Arboles Binarios(Java)
 
Técnicas de análisis
Técnicas de análisisTécnicas de análisis
Técnicas de análisis
 

Similar a Curso de Nivelación de Algoritmos - Clase 4

Utp pds_s_lab2 mat_lab basico
 Utp pds_s_lab2 mat_lab basico Utp pds_s_lab2 mat_lab basico
Utp pds_s_lab2 mat_lab basicojcbenitezp
 
9. listas y for-in
9.  listas y for-in9.  listas y for-in
9. listas y for-inFaby Ignacio
 
Introduccion a la programación
Introduccion a la programaciónIntroduccion a la programación
Introduccion a la programaciónfpcanizaresg
 
Utp pdiva_lab2 mat_lab basico
 Utp pdiva_lab2 mat_lab basico Utp pdiva_lab2 mat_lab basico
Utp pdiva_lab2 mat_lab basicojcbenitezp
 
Descubriendo scala
Descubriendo scalaDescubriendo scala
Descubriendo scalanluaces
 
Estructura de datos avanzada
Estructura de datos avanzadaEstructura de datos avanzada
Estructura de datos avanzadaMaestros en Linea
 
R manual
R manualR manual
R manualfre1305
 
Programacion en python_1
Programacion en python_1Programacion en python_1
Programacion en python_1wozgeass
 
Introduccion a la programacion
Introduccion a la programacionIntroduccion a la programacion
Introduccion a la programacionBETTYLLANOS
 
Fundamentos de programacion
Fundamentos de programacionFundamentos de programacion
Fundamentos de programacionSneydert Jhenz
 
Sesion1_Ciencia_de_Datos-Introduccion a Pithon.pdf
Sesion1_Ciencia_de_Datos-Introduccion a Pithon.pdfSesion1_Ciencia_de_Datos-Introduccion a Pithon.pdf
Sesion1_Ciencia_de_Datos-Introduccion a Pithon.pdfMarxx4
 

Similar a Curso de Nivelación de Algoritmos - Clase 4 (20)

Python para principiantes
Python para principiantesPython para principiantes
Python para principiantes
 
Utp pds_s_lab2 mat_lab basico
 Utp pds_s_lab2 mat_lab basico Utp pds_s_lab2 mat_lab basico
Utp pds_s_lab2 mat_lab basico
 
9. listas y for-in
9.  listas y for-in9.  listas y for-in
9. listas y for-in
 
Tutorial matlab
Tutorial matlabTutorial matlab
Tutorial matlab
 
2 Introducción al lenguaje Ruby
2 Introducción al lenguaje Ruby2 Introducción al lenguaje Ruby
2 Introducción al lenguaje Ruby
 
resumen matlab
resumen matlabresumen matlab
resumen matlab
 
Introduccion a la programación
Introduccion a la programaciónIntroduccion a la programación
Introduccion a la programación
 
Utp pdiva_lab2 mat_lab basico
 Utp pdiva_lab2 mat_lab basico Utp pdiva_lab2 mat_lab basico
Utp pdiva_lab2 mat_lab basico
 
Descubriendo scala
Descubriendo scalaDescubriendo scala
Descubriendo scala
 
Estructura de datos avanzada
Estructura de datos avanzadaEstructura de datos avanzada
Estructura de datos avanzada
 
TIPOS DE DATOS MATLAB
TIPOS DE DATOS MATLABTIPOS DE DATOS MATLAB
TIPOS DE DATOS MATLAB
 
Mat lab01
Mat lab01Mat lab01
Mat lab01
 
Tp1 2006
Tp1 2006Tp1 2006
Tp1 2006
 
R manual
R manualR manual
R manual
 
Programacion en python_1
Programacion en python_1Programacion en python_1
Programacion en python_1
 
Introduccion a la programacion
Introduccion a la programacionIntroduccion a la programacion
Introduccion a la programacion
 
Fundamentos de programacion
Fundamentos de programacionFundamentos de programacion
Fundamentos de programacion
 
Clase1. introducción a matlab
Clase1. introducción a matlabClase1. introducción a matlab
Clase1. introducción a matlab
 
Sesion1_Ciencia_de_Datos-Introduccion a Pithon.pdf
Sesion1_Ciencia_de_Datos-Introduccion a Pithon.pdfSesion1_Ciencia_de_Datos-Introduccion a Pithon.pdf
Sesion1_Ciencia_de_Datos-Introduccion a Pithon.pdf
 
Ejercicios Python parte 4
Ejercicios Python parte 4Ejercicios Python parte 4
Ejercicios Python parte 4
 

Curso de Nivelación de Algoritmos - Clase 4

  • 1. Recursión Notas de Programación Curso de Nivelación de Algoritmos Clase 4 Lic. Ernesto Mislej emislej@dc.uba.ar 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
  • 2. Recursión Notas de Programación Recursión Ejemplo Se tiene un almacén lleno de autopartes. Se quiere saber el precio de los productos, pero sólo se tiene una tabla de precios de partes y cómo se fabrican los productos. Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  • 3. Recursión Notas de Programación Recursión Ejemplo El producto #13 está compuesto por las partes #8, #3 y #2. A su vez, la parte #8 está compuesta por otra parte #2 y la parte #9. La parte #9 está compuesta por 3 partes #3. La parte #3 vale $1 y la parte #2 vale $4. ¿Cuánto vale el producto #13? ¿Es posible encontrar un algoritmo para encontrar el precio de un producto? Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  • 4. Recursión Notas de Programación Recursión Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  • 5. Recursión Notas de Programación Recursión Input: Un producto e Output: 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); end return a; end Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  • 6. Recursión Notas de Programación Recursión Ejemplo Escribir en forma recursiva la función factorial. Escribir la serie Fibonacci F (0) = 0 F (1) = 1 F (n) = F (n − 1) + F (n − 2) Implementen esta serie recursiva: n − 10, if n > 100 M(n) = M(M(n + 11)), if n ≤ 100 Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  • 7. Recursión Notas 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
  • 8. Recursión Notas de Programación Recursión Dividir el problema en sub-problemas del mismo tipo. Las funciones recursivas cuentan de: Caso Base: Uno o más casos ya definidos. Llamada Recursiva: Reglas para descender al Caso Base. Existen mecanismos para pasar de un esquema recursivo a un esquema iterativo. Los más complejos utilizan Pilas para almacenar las llamadas recursivas. Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  • 9. Recursión Notas de Programación Recursión Ejemplo Calcular el mínimo común múltiplo de 2 números. Escribir en forma recursiva el algoritmo de MergeSort. 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
  • 10. Recursión Notas de Programación Más sobre listas >>> # Más sobre listas >>> a = [1,2,3,5,6,7,9] >>> 4 in a 0 >>> 5 in a 1 >>> 4 not in a 1 >>> b = ["hola", "chau"] >>> a + b [1, 2, 3, 5, 6, 7, 9, ’hola’, ’chau’] Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  • 11. Recursión Notas 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
  • 12. Recursión Notas de Programación String Methods count (sub[, start[, end]]) Devuelve el número de ocurrencias del substring sub en el string S[start:end]. find (sub[, start[, end]]) Devuelve el índice correspondiente a la primera ocurrencia del substring sub en el string S[start:end]. Devuelve -1 si sub no es encontrada. index (sub[, start[, end]]) Como find(), pero da un raise ValueError cuando el sub no es encontrada. join (seq) Devuelve un string correspondiente a la concatenación de strings en la lista seq. Usando como separador al propio string . split ([sep [,maxsplit]]) Devuelve una lista de strings usando a sep como separador. maxsplit se puede utilizar para fijar la cantidad máxima de separaciones. Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  • 13. Recursión Notas 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
  • 14. Recursión Notas de Programación String Methods >>> a = "Los algoritmos me aburricionan" >>> a.find("d") -1 >>> a.index("d") Traceback (most recent call last): File "<interactive input>", line 1, in ? ValueError: substring not found in string.index Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  • 15. Recursión Notas 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
  • 16. Recursión Notas de Programación File Object file (filename[, mode[, bufsize]]) Devuelve un objeto file. El argumento filename es el nombre 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
  • 17. Recursión Notas de Programación File Object Supongamos que existe el archivo iris.data con esta pinta: 6.7,3.0,5.2,2.3,Iris-virginica. 6.0,2.2,5.0,1.5,Iris-virginica. 6.2,2.8,4.8,1.8,Iris-virginica. 7.7,3.8,6.7,2.2,Iris-virginica. 7.2,3.0,5.8,1.6,Iris-virginica. 5.5,2.4,3.8,1.1,Iris-versicolor. 6.0,2.7,5.1,1.6,Iris-versicolor. 5.5,2.5,4.0,1.3,Iris-versicolor. ... Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  • 18. Recursión Notas de Programación File Object >>> f = open ("H:facuiris.data", "r") >>> l = f.readline() >>> l ’6.7,3.0,5.2,2.3,Iris-virginica.n’ >>> l = f.readline() >>> l ’6.0,2.2,5.0,1.5,Iris-virginica.n’ >>> Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  • 19. Recursión Notas de Programación File Object >>> f.seek(0) #rebobina el archivo >>> l = f.readline() >>> l ’6.7,3.0,5.2,2.3,Iris-virginica.n’ >>> while l: #Mientras existan líneas ... a = l.split(",")[0] ... print a ... l = f.readline() ... 6.7 6.0 6.2 7.7 7.2 5.5... >>> l ’’ Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  • 20. Recursión Notas de Programación File Object >>> #Si quiero sumar la primera columna >>> f.seek(0) #rebobina el archivo >>> a = 0 >>> l = f.readline() >>> while l: ... a = a + float(l.split(",")[0]) ... print a ... l = f.readline() ... 6.7 12.7 18.9 26.6 33.8... >>> a 876.50000000000045 Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  • 21. Recursión Notas de Programación File Object >>> #Si crear un file con las primeras 2 columnas >>> #separados por ";" >>> f.seek(0) #rebobina el archivo >>> g = open("H:facuiris2.data", "w") >>> l = f.readline() >>> while l: ... a = l.split(",")[0:2] ... g.write (" ; ".join(a) + "n") ... l = f.readline() ... >>> g.close() >>> f.close() Lic. Ernesto Mislej Curso de Nivelación de Algoritmos