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
1.1 Definicin
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
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.
3.
4.
Los parmetros del mtodo Las variables locales del mtodo La direccin de retorno (donde inici la ejecucin de la llamada)
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.
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. }