tema 7 - recursividadocw.uc3m.es/historico/programacion-java/transparencias/tema7.pdf · el...

12
1 Recursividad TEMA 7 Manuel Pereira González V1.1 Agenda Introducción Ejemplos Factorial Invertir un Número Resolver Laberinto Cuándo utilizar Recursividad Algoritmos de Backtracking Las Ocho Reinas Sudoku Resumen

Upload: lenhan

Post on 15-Oct-2018

214 views

Category:

Documents


0 download

TRANSCRIPT

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

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

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

4

Ejemplo: Factorial

Agenda

IntroducciónEjemplos

FactorialInvertir un NúmeroResolver Laberinto

Cuándo utilizar RecursividadAlgoritmos de Backtracking

Las Ocho ReinasSudoku

Resumen

5

Ejemplo: Invertir un Número

Agenda

IntroducciónEjemplos

FactorialInvertir un NúmeroResolver Laberinto

Cuándo utilizar RecursividadAlgoritmos de Backtracking

Las Ocho ReinasSudoku

Resumen

6

Ejemplo: Resolver Laberinto

Ejemplo: Resolver Laberinto

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

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

9

Agenda

IntroducciónEjemplos

FactorialInvertir un NúmeroResolver Laberinto

Cuándo utilizar RecursividadAlgoritmos de Backtracking

Las Ocho ReinasSudoku

Resumen

Algoritmos de Backtracking: Ocho Reinas

10

Algoritmos de Backtracking: Ocho Reinas

Agenda

IntroducciónEjemplos

FactorialInvertir un NúmeroResolver Laberinto

Cuándo utilizar RecursividadAlgoritmos de Backtracking

Las Ocho ReinasSudoku

Resumen

11

Algoritmos de Backtracking: Sudoku

Algoritmos de Backtracking: Sudoku

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