Anda di halaman 1dari 17

ESTRUCTURA DE DATOS

Unidad II

Recursividad

Temas
2.1 Definicin 2.2 Procedimientos recursivos 2.3 Ejemplos de casos recursivos

Bibliografa
Estructura de datos y organizacin de archivos. Mary E. S. Loomis Data Structures and Algorithms in Java Michael T. Goodrich 4th edition Object-Oriented Data Structures Using Java Nell Dale, Daniel T. Joyce, Chip Weems

1.1 Definicin

La recursividad directa se da cuando un mtodo se llama a si mismo.

void A() { ... A() ... }

1.1 Definicin

La recursividad indirecta se da cuando el mtodo A llama al mtodo B, el mtodo B al A y as sucesivamente.

void A() { ... B() ... } void B() { ... A() ... }

1.1 Definicin

La recursividad es una herramienta poderosa, sin embargo, en algn problema en particular, podra ser menos eficiente que la solucin iteractiva.

1.1 Definicin

Dentro del procedimiento recursivo debe existir una condicin que detenga las llamadas recursivas (caso base). Cada procedimiento recursivo debe tener el cdigo necesario para llegar a la condicin del caso base. Algunos lenguajes no permiten la recursividad.

1.1 Definicin
Ejemplo clsico de recursividad; el factorial de un nmero:

4! = 4 * 3 * 2 * 1 = 24

1.1 Definicin
(Si n = 0 n! = 1 )
4! = 4 * (4 1)! = 4 * 3! 3! = 3 * (3 1)! = 3 * 2! 2! = 2 * (2 1)! = 2 * 1! 1! = 1 * (1 1)! = 1 * 0! 0! = 1

1.2 Mtodos recursivos

Mtodo de 3 preguntas
Existe alguna condicin que permita resolver el problema en forma iteractiva que sirva para detener las llamadas recursivas? Cada llamada al mtodo recursivo contempla una versin pequea del problema original? Si se realiza la llamada recursiva, funcionar correctamente todo el mtodo?

1.

2.

3.

1.2 Mtodos recursivos

1. 2.

Pasos para escribir mtodos recursivos


Tener la definicin exacta del problema a resolver. Determinar el mbito que tendr cada versin menor del problema, basndose en los valores de los parmetros que recibir cada llamada. Identificar la condicin que har que la recursividad termine Identificar y resolver el problema en sus versiones menores.

3.

4.

1.2 Mtodos recursivos

La recursividad mantiene una pila activa que guarda:

Los parmetros del mtodo Las variables locales del mtodo La direccin de retorno (donde inici la ejecucin de la llamada)

1.2 Mtodos recursivos

Cuando un mtodo es llamado, sus datos se meten a la pila. Cuando un mtodo ejecuta la sentencia return, los datos salen de la pila y el control de ejecucin se transfiere al lugar referenciado por la direccin obtenida de la pila.

1.3 Ejemplos de casos


1. 2. 3. 4. 5. 6. 7. 8. 9. void printInt( int k ) { if (k <= 0) return; System.out.println( k ); printInt( k - 1 ); } void main(...) { printInt(2); }

1.3 Ejemplos de casos

Dibuja los valores que va almacenando la pila durante las llamadas recursivas.
1. int factorial (int N) { 2. if (N == 0) 3. return 1; 4. else 5. return (N*factorial(N-1)); 6. } 7. void main(...) { 8. factorial(3); 9. }

1.3 Ejemplos de casos

Resolver en Java usando un mtodo recursivo que realice lo siguiente:

Resuelva el problema de las Torres de Hanoi Bsqueda binaria Serie Fibonacci.

Anda mungkin juga menyukai