Anda di halaman 1dari 12

TEMA 7

Recursividad

V1.1

Manuel Pereira Gonzlez

Agenda
Introduccin Ejemplos Factorial Invertir un Nmero Resolver Laberinto Cundo utilizar Recursividad Algoritmos de Backtracking Las Ocho Reinas Sudoku Resumen

Introduccin
Poderosa herramienta de programacin Alternativa a algoritmos iterativos Soluciones elegantes a problemas difciles de

resolver de otro modo Un mtodo es recursivo si contiene invocaciones a s mismo Una llamada a un mtodo recursivo puede generar una o ms invocaciones al mismo mtodo, que a su ve genera otras,

Introduccin
Condiciones que debe cumplir un mtodo

recursivo: Asegurar que existe una condicin 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 base Cada llamada, en el caso no base, conduce a problemas cada vez ms pequeos que terminarn en el caso base

Agenda
Introduccin Ejemplos Factorial Invertir un Nmero Resolver Laberinto Cundo utilizar Recursividad Algoritmos de Backtracking Las Ocho Reinas Sudoku Resumen

Ejemplo: Factorial
Definicin del factorial (definicin

recursiva): n! = n * (n-1)! , para n > 1 1! = 1 Casos y Soluciones:


Casos
n = 1 (caso base) n>1 return 1

Soluciones

return n * factorial(n 1)

Ejemplo: Factorial

Agenda
Introduccin Ejemplos Factorial Invertir un Nmero Resolver Laberinto Cundo utilizar Recursividad Algoritmos de Backtracking Las Ocho Reinas Sudoku Resumen

Ejemplo: Invertir un Nmero

Agenda
Introduccin Ejemplos Factorial Invertir un Nmero Resolver Laberinto Cundo utilizar Recursividad Algoritmos de Backtracking Las Ocho Reinas Sudoku Resumen

Ejemplo: Resolver Laberinto

Ejemplo: Resolver Laberinto

Agenda
Introduccin Ejemplos Factorial Invertir un Nmero Resolver Laberinto Cundo utilizar Recursividad Algoritmos de Backtracking Las Ocho Reinas Sudoku Resumen

Cundo 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 solucin iterativa es complicada y debe manejarse explcitamente una pila para emular las llamadas recursivas, deben resolverse por mtodos recursivos Cuando haya una solucin obvia al problema por iteracin, debe evitarse la recursividad

Agenda
Introduccin Ejemplos Factorial Invertir un Nmero Resolver Laberinto Cundo utilizar Recursividad Algoritmos de Backtracking Las Ocho Reinas Sudoku Resumen

Algoritmos de Backtracking
El backtracking o vuelta atrs es una tcnica

algortmica de resolucin general de problemas mediante una bsqueda sistemtica de soluciones. Se descompone la tarea a realizar en tareas parciales y se prueba sistemticamente cada una de estas, que a su vez se descompondrn en subtareas Cuando al elegir una tarea se comprueba que no lleva a una solucin, se debe volver atrs, y probar con otra

Agenda
Introduccin Ejemplos Factorial Invertir un Nmero Resolver Laberinto Cundo utilizar Recursividad Algoritmos de Backtracking Las Ocho Reinas Sudoku Resumen

Algoritmos de Backtracking: Ocho Reinas

Algoritmos de Backtracking: Ocho Reinas

Agenda
Introduccin Ejemplos Factorial Invertir un Nmero Resolver Laberinto Cundo utilizar Recursividad Algoritmos de Backtracking Las Ocho Reinas Sudoku Resumen

10

Algoritmos de Backtracking: Sudoku

Algoritmos de Backtracking: Sudoku

11

Agenda
Introduccin Ejemplos Factorial Invertir un Nmero Resolver Laberinto Cundo utilizar Recursividad Algoritmos de Backtracking Las Ocho Reinas Sudoku Resumen

Resumen
Introduccin Mtodo que se Cundo utilizar

invoca a s mismo Soluciones recursivas vs iterativas Ejemplos Factorial


Invertir un Nmero Resolver Laberinto
n! = n * (n-1)! 1! = 1

menos eficiente Recomendado si solucin iterativa difcil y problema de naturaleza recursiva Algoritmos de Backtracking Las Ocho Reinas Sudoku

Normalmente

12