![Page 1: Tema 7 - Recursividadocw.uc3m.es/cursos-archivados/programacion-java/tran... · 2019-03-20 · Recursividad TEMA 7 Manuel Pereira González V1.1 Agenda Introducción Ejemplos Factorial](https://reader034.vdocuments.co/reader034/viewer/2022043013/5fad4a1f9fb1e222a80aa252/html5/thumbnails/1.jpg)
1
Recursividad
TEMA 7
Manuel Pereira GonzálezV1.1
Agenda
IntroducciónEjemplos
FactorialInvertir un NúmeroResolver Laberinto
Cuándo utilizar RecursividadAlgoritmos de Backtracking
Las Ocho ReinasSudoku
Resumen
![Page 2: Tema 7 - Recursividadocw.uc3m.es/cursos-archivados/programacion-java/tran... · 2019-03-20 · Recursividad TEMA 7 Manuel Pereira González V1.1 Agenda Introducción Ejemplos Factorial](https://reader034.vdocuments.co/reader034/viewer/2022043013/5fad4a1f9fb1e222a80aa252/html5/thumbnails/2.jpg)
2
Introducción
Poderosa herramienta de programaciónAlternativa a algoritmos iterativosSoluciones elegantes a problemas difíciles de resolver de otro modoUn método es recursivo si contiene invocaciones a sí mismoUna llamada a un método recursivo puede generar una o más invocaciones al mismo método, que a su ve genera otras, …
Introducción
Condiciones que debe cumplir un método recursivo:
Asegurar que existe una condición de salida, en la que no se producen llamadas recursivas (caso base)Asegurar que se cubren todos los posibles casos entre el base y los no baseCada llamada, en el caso no base, conduce a problemas cada vez más pequeños que terminarán en el caso base
![Page 3: Tema 7 - Recursividadocw.uc3m.es/cursos-archivados/programacion-java/tran... · 2019-03-20 · Recursividad TEMA 7 Manuel Pereira González V1.1 Agenda Introducción Ejemplos Factorial](https://reader034.vdocuments.co/reader034/viewer/2022043013/5fad4a1f9fb1e222a80aa252/html5/thumbnails/3.jpg)
3
Agenda
IntroducciónEjemplos
FactorialInvertir un NúmeroResolver Laberinto
Cuándo utilizar RecursividadAlgoritmos de Backtracking
Las Ocho ReinasSudoku
Resumen
Ejemplo: Factorial
Definición del factorial (definición recursiva):
n! = n * (n-1)! , para n > 11! = 1
Casos y Soluciones:
return n * factorial(n – 1)n > 1
return 1n = 1 (caso base)
SolucionesCasos
![Page 4: Tema 7 - Recursividadocw.uc3m.es/cursos-archivados/programacion-java/tran... · 2019-03-20 · Recursividad TEMA 7 Manuel Pereira González V1.1 Agenda Introducción Ejemplos Factorial](https://reader034.vdocuments.co/reader034/viewer/2022043013/5fad4a1f9fb1e222a80aa252/html5/thumbnails/4.jpg)
4
Ejemplo: Factorial
Agenda
IntroducciónEjemplos
FactorialInvertir un NúmeroResolver Laberinto
Cuándo utilizar RecursividadAlgoritmos de Backtracking
Las Ocho ReinasSudoku
Resumen
![Page 5: Tema 7 - Recursividadocw.uc3m.es/cursos-archivados/programacion-java/tran... · 2019-03-20 · Recursividad TEMA 7 Manuel Pereira González V1.1 Agenda Introducción Ejemplos Factorial](https://reader034.vdocuments.co/reader034/viewer/2022043013/5fad4a1f9fb1e222a80aa252/html5/thumbnails/5.jpg)
5
Ejemplo: Invertir un Número
Agenda
IntroducciónEjemplos
FactorialInvertir un NúmeroResolver Laberinto
Cuándo utilizar RecursividadAlgoritmos de Backtracking
Las Ocho ReinasSudoku
Resumen
![Page 6: Tema 7 - Recursividadocw.uc3m.es/cursos-archivados/programacion-java/tran... · 2019-03-20 · Recursividad TEMA 7 Manuel Pereira González V1.1 Agenda Introducción Ejemplos Factorial](https://reader034.vdocuments.co/reader034/viewer/2022043013/5fad4a1f9fb1e222a80aa252/html5/thumbnails/6.jpg)
6
Ejemplo: Resolver Laberinto
Ejemplo: Resolver Laberinto
![Page 7: Tema 7 - Recursividadocw.uc3m.es/cursos-archivados/programacion-java/tran... · 2019-03-20 · Recursividad TEMA 7 Manuel Pereira González V1.1 Agenda Introducción Ejemplos Factorial](https://reader034.vdocuments.co/reader034/viewer/2022043013/5fad4a1f9fb1e222a80aa252/html5/thumbnails/7.jpg)
7
Agenda
IntroducciónEjemplos
FactorialInvertir un NúmeroResolver Laberinto
Cuándo utilizar RecursividadAlgoritmos de Backtracking
Las Ocho ReinasSudoku
Resumen
Cuándo utilizar recursividad
En general, las soluciones recursivas son menos eficientes que las iterativas (coste mayor en tiempo y memoria).Consejos:
Los algoritmos que por naturaleza son recursivos y donde la solución iterativa es complicada y debe manejarse explícitamente una pila para emular las llamadas recursivas, deben resolverse por métodos recursivosCuando haya una solución obvia al problema por iteración, debe evitarse la recursividad
![Page 8: Tema 7 - Recursividadocw.uc3m.es/cursos-archivados/programacion-java/tran... · 2019-03-20 · Recursividad TEMA 7 Manuel Pereira González V1.1 Agenda Introducción Ejemplos Factorial](https://reader034.vdocuments.co/reader034/viewer/2022043013/5fad4a1f9fb1e222a80aa252/html5/thumbnails/8.jpg)
8
Agenda
IntroducciónEjemplos
FactorialInvertir un NúmeroResolver Laberinto
Cuándo utilizar RecursividadAlgoritmos de Backtracking
Las Ocho ReinasSudoku
Resumen
Algoritmos de Backtracking
El backtracking o vuelta atrás es una técnica algorítmica de resolución general de problemasmediante una búsqueda sistemática de soluciones.Se descompone la tarea a realizar en tareas parciales y se prueba sistemáticamente cada una de estas, que a su vez se descompondrán en subtareas…Cuando al elegir una tarea se comprueba que no lleva a una solución, se debe volver atrás, y probar con otra
![Page 9: Tema 7 - Recursividadocw.uc3m.es/cursos-archivados/programacion-java/tran... · 2019-03-20 · Recursividad TEMA 7 Manuel Pereira González V1.1 Agenda Introducción Ejemplos Factorial](https://reader034.vdocuments.co/reader034/viewer/2022043013/5fad4a1f9fb1e222a80aa252/html5/thumbnails/9.jpg)
9
Agenda
IntroducciónEjemplos
FactorialInvertir un NúmeroResolver Laberinto
Cuándo utilizar RecursividadAlgoritmos de Backtracking
Las Ocho ReinasSudoku
Resumen
Algoritmos de Backtracking: Ocho Reinas
![Page 10: Tema 7 - Recursividadocw.uc3m.es/cursos-archivados/programacion-java/tran... · 2019-03-20 · Recursividad TEMA 7 Manuel Pereira González V1.1 Agenda Introducción Ejemplos Factorial](https://reader034.vdocuments.co/reader034/viewer/2022043013/5fad4a1f9fb1e222a80aa252/html5/thumbnails/10.jpg)
10
Algoritmos de Backtracking: Ocho Reinas
Agenda
IntroducciónEjemplos
FactorialInvertir un NúmeroResolver Laberinto
Cuándo utilizar RecursividadAlgoritmos de Backtracking
Las Ocho ReinasSudoku
Resumen
![Page 11: Tema 7 - Recursividadocw.uc3m.es/cursos-archivados/programacion-java/tran... · 2019-03-20 · Recursividad TEMA 7 Manuel Pereira González V1.1 Agenda Introducción Ejemplos Factorial](https://reader034.vdocuments.co/reader034/viewer/2022043013/5fad4a1f9fb1e222a80aa252/html5/thumbnails/11.jpg)
11
Algoritmos de Backtracking: Sudoku
Algoritmos de Backtracking: Sudoku
![Page 12: Tema 7 - Recursividadocw.uc3m.es/cursos-archivados/programacion-java/tran... · 2019-03-20 · Recursividad TEMA 7 Manuel Pereira González V1.1 Agenda Introducción Ejemplos Factorial](https://reader034.vdocuments.co/reader034/viewer/2022043013/5fad4a1f9fb1e222a80aa252/html5/thumbnails/12.jpg)
12
Agenda
IntroducciónEjemplos
FactorialInvertir un NúmeroResolver Laberinto
Cuándo utilizar RecursividadAlgoritmos de Backtracking
Las Ocho ReinasSudoku
Resumen
Resumen
IntroducciónMétodo que se invoca a sí mismoSoluciones recursivas vsiterativas
EjemplosFactorial
n! = n * (n-1)!1! = 1
Invertir un NúmeroResolver Laberinto
Cuándo utilizarNormalmente menos eficienteRecomendado si solución iterativa difícil y problema de naturaleza recursiva
Algoritmos de Backtracking
Las Ocho ReinasSudoku