Estructura de Datos - Unidad II Recursividad

11
Ingeniería en Sistemas Computacionales Estructura de Datos Unidad II: Recursividad Este material está desarrollado para la asignatura Estructura de Datos AED-1026, de la carrera de Ingeniería en Sistemas Computacionales, plan de estudios ISIC-2010-224.

Transcript of Estructura de Datos - Unidad II Recursividad

Ingeniería en Sistemas Computacionales

Estructura de DatosUnidad II: Recursividad

Este material está desarrollado para la asignatura Estructura de Datos AED-1026, de la carrera de Ingeniería en Sistemas Computacionales, plan de estudios ISIC-2010-224.

Unidad II: RecursividadTemario de la Unidad

Competencia de la Unidad• Comprender y aplicar la recursividad como herramienta de programación

para el manejo de las estructuras de datos.

Recursividad • Primero debemos decir que la recursividad no es una estructura de datos, sino

que es una técnica de programación que nos permite que un bloque de instrucciones se ejecute n veces. Remplaza en ocasiones a estructuras repetitivas.• Recurrencia, recursión o recursividad es la forma en la cual se especifica un

proceso basado en su propia definición. Siendo un poco más precisos, y para evitar el aparente círculo sin fin en esta definición: Una función recursiva es aquella que se llama a sí misma, bien

directamente o bien indirectamente a través de otra función. La recursividad es un tópico importante examinado frecuentemente en cursos en los que se trata de resolución de algoritmos y en cursos relativos a Estructuras de Datos.

• Una función o procedimiento que tiene sentencias entre las que se encuentra al menos una que llama a la propia función se dice que es recursiva. Así, la organización recursiva de una función funcion1 sería la siguiente:

void funcion1(parámetros){

...funcion1(parámetros); // llamada recursiva...

}

Condición de fin de la recursividad

• Cuando se implementa una función recursiva será preciso considerar una condición de terminación, ya que en caso contrario la función continuaría indefinidamente llamándose a sí misma y llegaría un momento en que la pila de memoria que registra las llamadas se desbordaría.

Ejercicio: Implementar un método que imprima un número en forma descendente de uno en uno.

Una vez hecho el primer programa implementar un método recursivo que imprima un número en forma descendente de uno en uno.

#include <cstdlib>#include <iostream>using namespace std;void recursivo (int num) { if (num>0) { cout << endl << num; recursivo(num-1); } }

int main(int argc, char *argv[]){ int n; cout << "Introduzca numero n: "; cin >> n; recursivo(n); system("pause"); return 0;}

Ejercicio: Implementar un método recursivo que imprima un número en forma descendente de uno en uno.

• Ejercicio: Realizar un programa que calcule el factorial de un número,• Primero debe hacer un programa que haga el cálculo de la forma

tradicional, es decir, utilizando ciclos.• Después hacer un segundo programa que en lugar de usar una estructura

cíclica o iterativa debe hacer uso de una función recursiva.

#include <cstdlib>#include <iostream>using namespace std;

long factorial (int n){ if (n > 1) { long resultado = n * factorial(n - 1); return resultado; } }

int main(){ int n; cout << "Introduzca numero n: "; cin >> n; cout <<endl << n << "! = " << factorial(n) << endl; system("pause"); return 0;}

• Tarea: Desarrolle un programa que muestre en pantalla la ejecución de la serie de números del código ASCII, cabe recordar que los primeros 32 números no son imprimibles.• El programa debe realizarse primero utilizando ciclos y después utilizando

recursividad.

Bibliografía

• Joyanes, Zahonero. Estructura de Datos en C++. McGraw Hill. Madrid, España. 2007. ISBN: 978-84-481-5645-9.