ESTRUCTURA DE DATOS:
FUNCIONES RECURSIVIDAD
¿Qué aprendimos la
sesión anterior?
Propósito
Reconocer la utilidad de las funciones
recursivas
FUNCIONES RECURSIVIDAD
Funciones Recursivas
• Módulos de programa que se retroalimentan con
valores generadas por sí mismas.
Hay que tener algunas cosas en cuenta en las funciones
recursivas:
- Toda función recursiva debe tener algún punto
de finalización.
- La función debe conducir a ese punto de
finalización.
• Ejemplo:
- Función Recursiva de Factorial.
- Función Recursiva de Multiplicacion.
- Función Recursiva de Potencia.
- Función Recursiva de Fibonacci
- Función Recursiva de Máximo Común Divisor
- Función Recursiva de Torres de Hanoi
Algoritmo Recursivo del Factorial
Ejemplo:
Recursividad del Factorial
3
while (3<0)
factorial (3)
factorial (3)
if(3==0)
return 3*factorial(2)
3*
factorial (2)
if(2==0)
return 2*factorial(1)
2*
factorial (1)
if(1==0)
return 1*factorial(0)
1*
factorial (0)
if(0==0)
1
return 6
6
F =
Prueba de
Escritorio
RECUERDA:
Librerías LecturaDatos.h FRecursivas.h
Ejemplo de Procedimiento Recursivo:
Torres de Hanoi
Prueba de Escritorio: Método del Arbol
Ejemplo:
Tres postes: A=Origen,B=Auxiliar,C=Destino
Cantidad de Discos: n=3
A B C
3
2
1
(3,A,B,C)
(n,org,aux,des)
(2,A,C,B)
(n,org,aux,des)
(1,A,B,C)
(n,org,aux,des)
(2,B,A,C)
(n,org,aux,des)
(1,A,B,C)
(n,org,aux,des)
A -> C
1
A -> B
2
(1,C,A,B)
(n,org,aux,des)
C -> B
1
A -> C
3
(1,B,C,A)
(n,org,aux,des)
B -> A
1
B -> C
2
A -> C
1
Carpeta: Programas Semana 14
Nombre Proyecto: Proyecto4_Hanoi
Nombre Programa: Programa4_Hanoi
Ya conocías a Hanoi..!
http://www.uterra.com/juegos/torre_hanoi.php
o
https://www.ajedrezeureka.com/torres-de-hanoi/
Un juego en línea Un juego de niños Una película
Librerías propias del lenguaje
Librerías creadas por programador
RECURSIÓN
RECURSIÓN: invocado en la línea 203
Variables Globales
Ordenamiento con burbuja usando
arreglos
//Ordenacion por Burbuja
#include<iostream>
#define MAX 100
using namespace std;
int leenum()
{ int num;
do{
cout<<"Ingrese numero de elementos para el arreglo: ";
cin>>num;
cout<<"n";
}while(num<=0 || num>MAX);
return num;
}
void ingresadatos(int V[MAX], int n)
{ int i;
cout<<"Ingrese elementos para el arreglo ";
cout<<"n";
for(i=0;i<n;i++)
{
cout<<"Elemento ["<<i<<"]"<<":";
cin>>V[i];
}
}
void mostrar(int V[MAX], int n)
{ int i;
cout<<"Los elementos del arreglo son";
cout<<"n";
for(i=0;i<n;i++)
{ cout<<"Elemento"<<"["<<i<<"]"<<":t";
cout<<V[i];
cout<<"n";
}
}
void burbuja(int a[MAX], int n)
{ int i,j,temp;
for(i=0;i<n-1;i++)
for(j=n-1;j>=i+1;j--)
if (a[j]<a[j-1])
{ temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
}
}
int main()
{
int A[MAX];
int num;
num=leenum();
ingresadatos(A,num);
cout<<"n";
cout<<"n";
burbuja(A,num);
mostrar(A,num);
}
Ordenamiento con burbuja usando
listas
#include<iostream>
#include<stdlib.h>
using namespace std;
//************************************
struct nodo{
int info;
struct nodo *sgt;
};
//************************************
main(){
struct nodo *lista;//Declarando variables de tipo nodo
struct nodo *actual;//
struct nodo *siguiente;//
lista=NULL;
int dato;
int t;
int cant, i=1, cont;
cout<<"Entrar cantidad de nodos=";
cin>>cant;
while(i<=cant){
actual=new(nodo);
actual->sgt=lista;
cout<<"Ingrese dato a la lista=";
cin>>dato;
actual->info=dato;//(*nuevo).info = dato;
lista=actual;
i++;
}
// Mostrar la lista ingresada
cout<<"La lista ingresada es:"<<endl;
while(actual!=NULL){
cout<<"nDATO="<<actual->info;
actual=actual->sgt;
}
// Ordenamiento : Método de la burbuja
actual = lista;
while(actual->sgt != NULL)
{
siguiente = actual->sgt;
while(siguiente!=NULL)
{
if(actual->info > siguiente->info)
{
t = siguiente->info;
siguiente->info = actual->info;
actual->info = t;
}
siguiente = siguiente->sgt;
}
actual = actual->sgt;
siguiente = actual->sgt;
}
// Mostrar la lista ordenada
cout<<endl<<endl;
cout<<"La lista ordenada es:"<<endl<<endl;
actual = lista;
while(actual!=NULL){
//cout<<"nDATO="<<actual->info;
cout<<"nLISTA-->"<<actual->info;
actual=actual->sgt;
}
system("pause>>null");
}
Implementar una opción de menús de ordenamiento, en base a la
dispositiva anterior, y agregar el método de QuickSort (ordenamiento
con funciones recursivas).
El ingreso debe ser con números aleatorios y mostrar la comparación en
tiempos de ejecución en segundos
Menú de ordemiento
1. Burbuja
2. QuickSort
3. Comparación en tiempos de ejecución
Ejercicio
Asignación de Trabajo Final
(Evaluación Final)
Propósito de la Clase
(Laboratorio)
Aplica los módulos de programa como
Procedimientos, Funciones,
Recursividad.
Estructuras de Datos Recursividad en Dev C++

Estructuras de Datos Recursividad en Dev C++

  • 1.
  • 2.
  • 3.
    Propósito Reconocer la utilidadde las funciones recursivas
  • 4.
  • 5.
    Funciones Recursivas • Módulosde programa que se retroalimentan con valores generadas por sí mismas. Hay que tener algunas cosas en cuenta en las funciones recursivas: - Toda función recursiva debe tener algún punto de finalización. - La función debe conducir a ese punto de finalización.
  • 6.
    • Ejemplo: - FunciónRecursiva de Factorial. - Función Recursiva de Multiplicacion. - Función Recursiva de Potencia. - Función Recursiva de Fibonacci - Función Recursiva de Máximo Común Divisor - Función Recursiva de Torres de Hanoi
  • 7.
  • 8.
    Ejemplo: Recursividad del Factorial 3 while(3<0) factorial (3) factorial (3) if(3==0) return 3*factorial(2) 3* factorial (2) if(2==0) return 2*factorial(1) 2* factorial (1) if(1==0) return 1*factorial(0) 1* factorial (0) if(0==0) 1 return 6 6 F = Prueba de Escritorio
  • 9.
  • 10.
    Ejemplo de ProcedimientoRecursivo: Torres de Hanoi Prueba de Escritorio: Método del Arbol Ejemplo: Tres postes: A=Origen,B=Auxiliar,C=Destino Cantidad de Discos: n=3 A B C 3 2 1 (3,A,B,C) (n,org,aux,des) (2,A,C,B) (n,org,aux,des) (1,A,B,C) (n,org,aux,des) (2,B,A,C) (n,org,aux,des) (1,A,B,C) (n,org,aux,des) A -> C 1 A -> B 2 (1,C,A,B) (n,org,aux,des) C -> B 1 A -> C 3 (1,B,C,A) (n,org,aux,des) B -> A 1 B -> C 2 A -> C 1 Carpeta: Programas Semana 14 Nombre Proyecto: Proyecto4_Hanoi Nombre Programa: Programa4_Hanoi
  • 11.
    Ya conocías aHanoi..! http://www.uterra.com/juegos/torre_hanoi.php o https://www.ajedrezeureka.com/torres-de-hanoi/ Un juego en línea Un juego de niños Una película
  • 12.
    Librerías propias dellenguaje Librerías creadas por programador RECURSIÓN RECURSIÓN: invocado en la línea 203 Variables Globales
  • 13.
    Ordenamiento con burbujausando arreglos //Ordenacion por Burbuja #include<iostream> #define MAX 100 using namespace std; int leenum() { int num; do{ cout<<"Ingrese numero de elementos para el arreglo: "; cin>>num; cout<<"n"; }while(num<=0 || num>MAX); return num; } void ingresadatos(int V[MAX], int n) { int i; cout<<"Ingrese elementos para el arreglo "; cout<<"n"; for(i=0;i<n;i++) { cout<<"Elemento ["<<i<<"]"<<":"; cin>>V[i]; } } void mostrar(int V[MAX], int n) { int i; cout<<"Los elementos del arreglo son"; cout<<"n"; for(i=0;i<n;i++) { cout<<"Elemento"<<"["<<i<<"]"<<":t"; cout<<V[i]; cout<<"n"; } } void burbuja(int a[MAX], int n) { int i,j,temp; for(i=0;i<n-1;i++) for(j=n-1;j>=i+1;j--) if (a[j]<a[j-1]) { temp=a[j]; a[j]=a[j-1]; a[j-1]=temp; } } int main() { int A[MAX]; int num; num=leenum(); ingresadatos(A,num); cout<<"n"; cout<<"n"; burbuja(A,num); mostrar(A,num); } Ordenamiento con burbuja usando listas #include<iostream> #include<stdlib.h> using namespace std; //************************************ struct nodo{ int info; struct nodo *sgt; }; //************************************ main(){ struct nodo *lista;//Declarando variables de tipo nodo struct nodo *actual;// struct nodo *siguiente;// lista=NULL; int dato; int t; int cant, i=1, cont; cout<<"Entrar cantidad de nodos="; cin>>cant; while(i<=cant){ actual=new(nodo); actual->sgt=lista; cout<<"Ingrese dato a la lista="; cin>>dato; actual->info=dato;//(*nuevo).info = dato; lista=actual; i++; } // Mostrar la lista ingresada cout<<"La lista ingresada es:"<<endl; while(actual!=NULL){ cout<<"nDATO="<<actual->info; actual=actual->sgt; } // Ordenamiento : Método de la burbuja actual = lista; while(actual->sgt != NULL) { siguiente = actual->sgt; while(siguiente!=NULL) { if(actual->info > siguiente->info) { t = siguiente->info; siguiente->info = actual->info; actual->info = t; } siguiente = siguiente->sgt; } actual = actual->sgt; siguiente = actual->sgt; } // Mostrar la lista ordenada cout<<endl<<endl; cout<<"La lista ordenada es:"<<endl<<endl; actual = lista; while(actual!=NULL){ //cout<<"nDATO="<<actual->info; cout<<"nLISTA-->"<<actual->info; actual=actual->sgt; } system("pause>>null"); }
  • 14.
    Implementar una opciónde menús de ordenamiento, en base a la dispositiva anterior, y agregar el método de QuickSort (ordenamiento con funciones recursivas). El ingreso debe ser con números aleatorios y mostrar la comparación en tiempos de ejecución en segundos Menú de ordemiento 1. Burbuja 2. QuickSort 3. Comparación en tiempos de ejecución Ejercicio
  • 15.
    Asignación de TrabajoFinal (Evaluación Final)
  • 18.
    Propósito de laClase (Laboratorio) Aplica los módulos de programa como Procedimientos, Funciones, Recursividad.