SlideShare una empresa de Scribd logo
1 de 32
Descargar para leer sin conexión
Análisis y Diseño
de Software
Departamento de Ingeniería de Sistemas Telemáticos
http://moodle.dit.upm.es
Tema 1. Recursión
Carlos A. Iglesias <cif@gsi.dit.upm.es>
Recursión 2
Teoría
Ejercicio práctico en el ordenador
Ampliación de conocimientos
Lectura / Vídeo / Podcast
Práctica libre / Experimentación
Legenda
Recursión 3
Bibliografía
● Libros:
– Data Structures &
Algorithms in Java,
Robert Lafore, 2nd
Edition, SAMS,
capítulo 6,
recursión, 2002
Recursión 4
Biblografía
Cracking the coding
interview: 150
problems and
solutions, G.
Laakmann, 5th edition,
CareersCup, 2011.
Recursión 5
Bibliografía
● Gödel, Escher,
Bach, Un eterno y
grácil bucle,
Douglas Hofstadter,
Tusquets,1987.
Recursión 6
Vídeo recursión
● Vídeo depuración con eclipse y recursión
http://comscigate.com/environ/Eclipse/tut/debugger/debugger-lesson07/lesson07.html
Recursión 7
Enlaces
● Sucesión de Fibonacci
– http://es.wikipedia.org/wiki/Sucesi%C3%B3n_de_Fibonacci
● Recursión
– http://es.wikipedia.org/wiki/Recursi%C3%B3n_(ciencias_de_computaci%C3
%B3n
)
Recursión 8
Temario
● Qué es un algoritmo recursivo
● Recursión e iteración
● Fibonacci. Versión recursiva e iterativa
● Cómo programar un algoritmo recursivo
● Depurar métodos recursivos con Eclipse
Recursión 9
Objetivos
● Entender qué es un algoritmo recursivo
● Entender la diferencia entre recursión e
iteración
● Entender el código de un método recursivo
● Aprender a programar un método recursivo
● Aprender a depurar un método recursivo
Recursión 10
Recursión
@ Josh Sommers
Recursión 11
Recursión
@ Josh Sommers
Recursión 12
Algoritmo
“Conjunto ordenado y finito de operaciones
que permite hallar la solución de un
problema.” (RAE )
Recursión 13
¿Qué es un método
recursivo?
● Un método que se llama a sí mismo
● Para que no entre en bucle infinito, tiene
que tener una condición de parada (de la
recursividad)
Recursión 14
Ejemplo - Fibonacci
● Los conejos no crían hasta los 2 meses
● Desde el mes 2, cada mes dan 1 cría
Recursión 15
Sucesión de Fibonacci
●0, 1, 1, 2, 3, 5, 8, 13, 21, 34,
55, 89, …
●Serie:
– F(0) = 0
– F(1) = 1
– F(2) = F(1) + F(0)
– F(3) = F(2) + F(1)
– …
– F(n) = F(n-1)+F(n-2)
●Definición
– F(n) = n, n < 2
– F(n) = F(n-1) + F(n-2), n >= 2
Leonardo de Pisa, Fibonacci
Recursión 16
Resolución : Recursivo vs
iterativo
Recursivo: la
función se llama a sí
misma
Iterativa: usamos un
bucle
Recursión 17
Cómo funciona la recursión
Repetimos el cálculo de forma muy ineficiente: 18 llamadas a F:
1xF(5), 2xF(4), 3xF(3), 5xF(2), 3xF(1), calculando varias veces lo
mismo
Recursión 18
Mejora algoritmo recursivo
Recursión 19
Eficiencia...
● El ejemplo de Fibonacci es un ejemplo de
'mal uso de la recursión'
– Calculando sucesión hasta 50:
• Iterativo / Recursivo con memoria: 3seg por número
• Recursivo “puro”
Recursión 20
Prueba...
● Prueba a cambiar
long en la
implementación
iterativa por int (p.ej.
f1 y f2) y prueba
para un valor alto
(47, …) ¿qué
sucede, por qué?
Recursión 21
Cómo reconocer una función
recursiva
● Un problema que está compuesto de
subproblemas
● El problema se puede definir como un
término n que se calcula en función del
término n - 1
Recursión 22
Cómo implementar un método
recursivo
● Piensa cuál es el subproblema
● Resuelve el “caso base”, normalmente
será un valor 'constante', p.ej. f(0)
● Intenta entender cómo calcular f(1)
● Calcula f(2) en función de f(1)
● Generaliza para el caso n
Recursión 23
Cómo programar una función
recursiva
● Caso base no recursivo (condición de
parada de la recursión)
● Recursión pasando un valor diferente
● Precaución:
– No entrar en bucle infinito
– Tener suficiente memoria para la pila de
llamadas
Caso base no recursivo
Recursión
Recursión 24
Ejercicio
● Programar la función factorial, de forma iterativa y
recursiva
– factorial(0) = 1
– factorial(n) = n* factorial(n-1)
● Ej. 5! = 5 * 4!
= 5 * (4 * 3!)
= 5 * (4 * (3 * 2!))
= 5 * (4 * (3 * (2 * 1!)))
= 5 * (4 * (3 * (2 * (1 * 0!))))
= 5 * (4 * (3 * (2 * (1 * 1)))))
= 5 * 4 * 3 * 2 * 1
= 120
Recursión 25
La pila de llamadas
● Vamos a ver cómo depurar (ver vídeo de
bibliografía)
● Pasos
– Ponemos un punto de parada (breakpoint)
• P ej. en la declaración del método
– Ejecutamos “Debug As”
• JUnitTest (si lo lanzamos con Junit)
• Java application (si lo lanzamos desde el main)
Recursión 26
Pila de llamadas.
factorialD(4)
Variable local n f(4) = 4 * f(3)
Variable local n f(3) = 3 * f(2)
Variable local n f(2) = 2 * f(1)
f(2)
f(3)
f(4)
f(3)
f(4)
f(4)
Recursión 27
Pila de llamadas (II)
Variable local n f(1) = 1
Variable local n f(2) = 2 * 1 = 2
Variable local n f(3) = 3 * 2 = 6
f(1)
f(2)
f(3)
f(4)
f(2)
f(3)
f(4)
f(3)
f(4)
Recursión 28
Pila de llamadas (III)
Variable local n f(4) = 4 * 6 = 24
f(4)
Recursión 29
Preguntas...
●¿Es la versión recursiva
normalmente más rápida?
– NO
●¿Ocupa menos memoria la
versión recursiva?
– NO
●¿Entonces por qué usamos
recursión?
– A veces es mucho más simple
programar la versión recursiva
Recursión 30
Recursión
Recursión 31
Resumen
● Usa recursión para tener código más claro que
facilite su programación y mantenimiento
● Recuerda que un método recursivo
– Tiene que tener un caso base
– La recursión debe hacer que avance hacia el caso base
● La recursión puede ser elegante y a menudo está
infrautilizada, mira si es una buena solución cuando
tiene un problema
● Ten en cuenta los recursos y si necesitas optimizar
la solución o es mejor la opción iterativa
Recursión 32
¿Preguntas?

Más contenido relacionado

La actualidad más candente

La actualidad más candente (12)

Por que java
Por que javaPor que java
Por que java
 
Control de flujo bucles
Control de flujo buclesControl de flujo bucles
Control de flujo bucles
 
Sesión 2: Ejemplos y prácticas en Python
Sesión 2: Ejemplos y prácticas en PythonSesión 2: Ejemplos y prácticas en Python
Sesión 2: Ejemplos y prácticas en Python
 
Clase3_Python-CTIC
Clase3_Python-CTICClase3_Python-CTIC
Clase3_Python-CTIC
 
Recursividad Con C#
Recursividad Con C#Recursividad Con C#
Recursividad Con C#
 
Clase2_Python-CTIC
Clase2_Python-CTICClase2_Python-CTIC
Clase2_Python-CTIC
 
Algoritmos de Planeacion
Algoritmos de PlaneacionAlgoritmos de Planeacion
Algoritmos de Planeacion
 
Tema3
Tema3Tema3
Tema3
 
Optimización global
Optimización globalOptimización global
Optimización global
 
Presentacion bucle
Presentacion buclePresentacion bucle
Presentacion bucle
 
Tema4 programación generica
Tema4   programación genericaTema4   programación generica
Tema4 programación generica
 
Optimizacion de Compiladores
Optimizacion de CompiladoresOptimizacion de Compiladores
Optimizacion de Compiladores
 

Similar a Análisis y Diseño de Software Recursión

Similar a Análisis y Diseño de Software Recursión (20)

Ud 1 4 metodos numericos 4ª presentacion
Ud 1 4 metodos numericos 4ª presentacionUd 1 4 metodos numericos 4ª presentacion
Ud 1 4 metodos numericos 4ª presentacion
 
Curso recursividad
Curso   recursividadCurso   recursividad
Curso recursividad
 
Funciones recursivas en C++
Funciones recursivas en C++Funciones recursivas en C++
Funciones recursivas en C++
 
Recursividad
RecursividadRecursividad
Recursividad
 
2. Recursividad
2. Recursividad2. Recursividad
2. Recursividad
 
Recursividad
RecursividadRecursividad
Recursividad
 
Recursividad
RecursividadRecursividad
Recursividad
 
Recursividad.pdf
Recursividad.pdfRecursividad.pdf
Recursividad.pdf
 
Funciones recursivas
Funciones recursivasFunciones recursivas
Funciones recursivas
 
Recursividad.pdf
Recursividad.pdfRecursividad.pdf
Recursividad.pdf
 
Recursividad 100329105433-phpapp01
Recursividad 100329105433-phpapp01Recursividad 100329105433-phpapp01
Recursividad 100329105433-phpapp01
 
Conceptos básicos de un lenguaje de programación
Conceptos básicos de un lenguaje de programaciónConceptos básicos de un lenguaje de programación
Conceptos básicos de un lenguaje de programación
 
11 Recursion
11 Recursion11 Recursion
11 Recursion
 
Procesos y Planificación de la CPU
Procesos y Planificación de la CPUProcesos y Planificación de la CPU
Procesos y Planificación de la CPU
 
Guía n° 05 Matemática IV
Guía n° 05 Matemática IVGuía n° 05 Matemática IV
Guía n° 05 Matemática IV
 
Tema 3 ejercicios de numeros reales potencias-radicales
Tema 3   ejercicios de numeros reales potencias-radicalesTema 3   ejercicios de numeros reales potencias-radicales
Tema 3 ejercicios de numeros reales potencias-radicales
 
Recursion
RecursionRecursion
Recursion
 
Pipelining
PipeliningPipelining
Pipelining
 
6.leccion9 metareglasy control
6.leccion9 metareglasy control6.leccion9 metareglasy control
6.leccion9 metareglasy control
 
Hibridación Iterativa de DE con BL con reinicio para alta dimensionalidad
Hibridación Iterativa de DE con BL con reinicio para alta dimensionalidadHibridación Iterativa de DE con BL con reinicio para alta dimensionalidad
Hibridación Iterativa de DE con BL con reinicio para alta dimensionalidad
 

Más de Carlos A. Iglesias (20)

GSI Research Group Presentation
GSI Research Group PresentationGSI Research Group Presentation
GSI Research Group Presentation
 
Entorno PHP
Entorno PHPEntorno PHP
Entorno PHP
 
Bootstrap 3.
Bootstrap 3.Bootstrap 3.
Bootstrap 3.
 
Introducción CSS
Introducción CSSIntroducción CSS
Introducción CSS
 
Introducción HTML
Introducción HTMLIntroducción HTML
Introducción HTML
 
Presentación TEWC
Presentación TEWCPresentación TEWC
Presentación TEWC
 
UPM GSI Presentation
UPM GSI PresentationUPM GSI Presentation
UPM GSI Presentation
 
Introducción Análisis y Diseño
Introducción Análisis y DiseñoIntroducción Análisis y Diseño
Introducción Análisis y Diseño
 
PHP. Bases de Datos
PHP. Bases de DatosPHP. Bases de Datos
PHP. Bases de Datos
 
PHP. Tecnologías Web.
PHP. Tecnologías Web.PHP. Tecnologías Web.
PHP. Tecnologías Web.
 
1 intro php
1 intro php1 intro php
1 intro php
 
0 entorno php
0 entorno php0 entorno php
0 entorno php
 
Introducción TEWC
Introducción TEWCIntroducción TEWC
Introducción TEWC
 
Tema 4.1 Introduccion Android
Tema 4.1 Introduccion AndroidTema 4.1 Introduccion Android
Tema 4.1 Introduccion Android
 
Tema 4.2 Desarrollo Android e instalacion
Tema 4.2 Desarrollo Android e instalacionTema 4.2 Desarrollo Android e instalacion
Tema 4.2 Desarrollo Android e instalacion
 
Tema 4.3 Ejemplo sobre teleco
Tema 4.3 Ejemplo sobre telecoTema 4.3 Ejemplo sobre teleco
Tema 4.3 Ejemplo sobre teleco
 
Tema 4.4 Actividades
Tema 4.4 ActividadesTema 4.4 Actividades
Tema 4.4 Actividades
 
Tema 4.5 interfaces
Tema 4.5 interfacesTema 4.5 interfaces
Tema 4.5 interfaces
 
Tema 4.6 Intenciones
Tema 4.6 IntencionesTema 4.6 Intenciones
Tema 4.6 Intenciones
 
Tema 4.7 Acceso a datos
Tema 4.7 Acceso a datosTema 4.7 Acceso a datos
Tema 4.7 Acceso a datos
 

Último

tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzzAlexandergo5
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel tallerValentinaTabares11
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificialcynserafini89
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfedepmariaperez
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesEdomar AR
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 

Último (20)

tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzz
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel taller
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificial
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdf
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, Aplicaciones
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 

Análisis y Diseño de Software Recursión

  • 1. Análisis y Diseño de Software Departamento de Ingeniería de Sistemas Telemáticos http://moodle.dit.upm.es Tema 1. Recursión Carlos A. Iglesias <cif@gsi.dit.upm.es>
  • 2. Recursión 2 Teoría Ejercicio práctico en el ordenador Ampliación de conocimientos Lectura / Vídeo / Podcast Práctica libre / Experimentación Legenda
  • 3. Recursión 3 Bibliografía ● Libros: – Data Structures & Algorithms in Java, Robert Lafore, 2nd Edition, SAMS, capítulo 6, recursión, 2002
  • 4. Recursión 4 Biblografía Cracking the coding interview: 150 problems and solutions, G. Laakmann, 5th edition, CareersCup, 2011.
  • 5. Recursión 5 Bibliografía ● Gödel, Escher, Bach, Un eterno y grácil bucle, Douglas Hofstadter, Tusquets,1987.
  • 6. Recursión 6 Vídeo recursión ● Vídeo depuración con eclipse y recursión http://comscigate.com/environ/Eclipse/tut/debugger/debugger-lesson07/lesson07.html
  • 7. Recursión 7 Enlaces ● Sucesión de Fibonacci – http://es.wikipedia.org/wiki/Sucesi%C3%B3n_de_Fibonacci ● Recursión – http://es.wikipedia.org/wiki/Recursi%C3%B3n_(ciencias_de_computaci%C3 %B3n )
  • 8. Recursión 8 Temario ● Qué es un algoritmo recursivo ● Recursión e iteración ● Fibonacci. Versión recursiva e iterativa ● Cómo programar un algoritmo recursivo ● Depurar métodos recursivos con Eclipse
  • 9. Recursión 9 Objetivos ● Entender qué es un algoritmo recursivo ● Entender la diferencia entre recursión e iteración ● Entender el código de un método recursivo ● Aprender a programar un método recursivo ● Aprender a depurar un método recursivo
  • 12. Recursión 12 Algoritmo “Conjunto ordenado y finito de operaciones que permite hallar la solución de un problema.” (RAE )
  • 13. Recursión 13 ¿Qué es un método recursivo? ● Un método que se llama a sí mismo ● Para que no entre en bucle infinito, tiene que tener una condición de parada (de la recursividad)
  • 14. Recursión 14 Ejemplo - Fibonacci ● Los conejos no crían hasta los 2 meses ● Desde el mes 2, cada mes dan 1 cría
  • 15. Recursión 15 Sucesión de Fibonacci ●0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, … ●Serie: – F(0) = 0 – F(1) = 1 – F(2) = F(1) + F(0) – F(3) = F(2) + F(1) – … – F(n) = F(n-1)+F(n-2) ●Definición – F(n) = n, n < 2 – F(n) = F(n-1) + F(n-2), n >= 2 Leonardo de Pisa, Fibonacci
  • 16. Recursión 16 Resolución : Recursivo vs iterativo Recursivo: la función se llama a sí misma Iterativa: usamos un bucle
  • 17. Recursión 17 Cómo funciona la recursión Repetimos el cálculo de forma muy ineficiente: 18 llamadas a F: 1xF(5), 2xF(4), 3xF(3), 5xF(2), 3xF(1), calculando varias veces lo mismo
  • 19. Recursión 19 Eficiencia... ● El ejemplo de Fibonacci es un ejemplo de 'mal uso de la recursión' – Calculando sucesión hasta 50: • Iterativo / Recursivo con memoria: 3seg por número • Recursivo “puro”
  • 20. Recursión 20 Prueba... ● Prueba a cambiar long en la implementación iterativa por int (p.ej. f1 y f2) y prueba para un valor alto (47, …) ¿qué sucede, por qué?
  • 21. Recursión 21 Cómo reconocer una función recursiva ● Un problema que está compuesto de subproblemas ● El problema se puede definir como un término n que se calcula en función del término n - 1
  • 22. Recursión 22 Cómo implementar un método recursivo ● Piensa cuál es el subproblema ● Resuelve el “caso base”, normalmente será un valor 'constante', p.ej. f(0) ● Intenta entender cómo calcular f(1) ● Calcula f(2) en función de f(1) ● Generaliza para el caso n
  • 23. Recursión 23 Cómo programar una función recursiva ● Caso base no recursivo (condición de parada de la recursión) ● Recursión pasando un valor diferente ● Precaución: – No entrar en bucle infinito – Tener suficiente memoria para la pila de llamadas Caso base no recursivo Recursión
  • 24. Recursión 24 Ejercicio ● Programar la función factorial, de forma iterativa y recursiva – factorial(0) = 1 – factorial(n) = n* factorial(n-1) ● Ej. 5! = 5 * 4! = 5 * (4 * 3!) = 5 * (4 * (3 * 2!)) = 5 * (4 * (3 * (2 * 1!))) = 5 * (4 * (3 * (2 * (1 * 0!)))) = 5 * (4 * (3 * (2 * (1 * 1))))) = 5 * 4 * 3 * 2 * 1 = 120
  • 25. Recursión 25 La pila de llamadas ● Vamos a ver cómo depurar (ver vídeo de bibliografía) ● Pasos – Ponemos un punto de parada (breakpoint) • P ej. en la declaración del método – Ejecutamos “Debug As” • JUnitTest (si lo lanzamos con Junit) • Java application (si lo lanzamos desde el main)
  • 26. Recursión 26 Pila de llamadas. factorialD(4) Variable local n f(4) = 4 * f(3) Variable local n f(3) = 3 * f(2) Variable local n f(2) = 2 * f(1) f(2) f(3) f(4) f(3) f(4) f(4)
  • 27. Recursión 27 Pila de llamadas (II) Variable local n f(1) = 1 Variable local n f(2) = 2 * 1 = 2 Variable local n f(3) = 3 * 2 = 6 f(1) f(2) f(3) f(4) f(2) f(3) f(4) f(3) f(4)
  • 28. Recursión 28 Pila de llamadas (III) Variable local n f(4) = 4 * 6 = 24 f(4)
  • 29. Recursión 29 Preguntas... ●¿Es la versión recursiva normalmente más rápida? – NO ●¿Ocupa menos memoria la versión recursiva? – NO ●¿Entonces por qué usamos recursión? – A veces es mucho más simple programar la versión recursiva
  • 31. Recursión 31 Resumen ● Usa recursión para tener código más claro que facilite su programación y mantenimiento ● Recuerda que un método recursivo – Tiene que tener un caso base – La recursión debe hacer que avance hacia el caso base ● La recursión puede ser elegante y a menudo está infrautilizada, mira si es una buena solución cuando tiene un problema ● Ten en cuenta los recursos y si necesitas optimizar la solución o es mejor la opción iterativa