La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Estructuras de Datos Ejemplos Recursión.

Presentaciones similares


Presentación del tema: "Estructuras de Datos Ejemplos Recursión."— Transcripción de la presentación:

1 Estructuras de Datos Ejemplos Recursión

2 // Suma recursiva de elementos en un vector
#include <iostream.h> int suma(int v[],int i, int n) { if (i==n) return v[i]; else return v[i] + suma(v,i+1, n); } void main(void) int vec[]= { 12, 4, 5, 6, 7}; cout << suma(vec,0, 4);

3 // Suma recursiva de elementos en un vector
// Versión usando notación de punteros #include <iostream.h> int suma(int *v,int *n) { if (v==n) // Pregunta si está en la dirección del último... return *v; else return *v + suma(v+1, n); } void main(void) int vec[]= { 12, 4, 5, 6, 7}; cout << suma(vec,vec+4);

4 // Búsqueda de un elemento en un vector
#include <iostream.h> int busca(int v[],int clave,int i, int n) { if (v[i] == clave) return 1; if (i == n) return 0; return busca(v, clave, i+1, n); } void main(void) int clave; int vec[]= { 12, 4, 5, 6, 7}; cout<< "Entre el dato a buscar:"; cin>> clave; cout<< busca(vec,clave, 0, 4);

5 // Invierte los elementos de un vector:
#include <iostream.h> void invierte(int izq, int v[], int der) { if (der > izq) { int aux = v[izq]; v[izq] = v[der]; v[der] = aux; invierte(izq+1, v, der-1); } void main(void) int vec[]= {1,3,5,8,20}; invierte(0, vec, 4); for(int k=0; k<5; k++) cout << vec[k];

6 // ¿Qué hace este programa?
#include <iostream.h> void mistery1(int v[],int i, int n) { if (i <= n) { cout<< v[i] << endl; mistery1 (v, i+1, n); } void main(void) int vec[]= {1,9,5,8,20}; mistery1(vec,0, 4);

7 // ¿Cuál es la diferencia de este con respecto al anterior?
#include <iostream.h> void mistery2(int v[],int i, int n) { if (i <= n) { mistery2(v, i+1, n); cout<< v[i] << endl; } void main(void) int vec[]= {1,9,5,8,20}; mistery2(vec,0, 4);

8 // ¿Y este? #include <iostream.h> void mistery3(int v[],int i, int n) { if (i < n) { cout<< v[i] << endl; mistery3(v, i+1, n); cout<< v[i] << endl; } void main(void) int vec[]= {1,9,5,8,20}; mistery3(vec,0,5);

9 // Comparando 2 vectores de caracteres recursivamente
// (se podría usar por supuesto strcmp()... ) #include <iostream.h> int iguales(char a[],char b[],int i,int tam) { if (a[i]== b[i]) if ( i==tam ) return 1; else return iguales(a,b, i+1, tam); } else return 0;

10 void main(void) { char vec1[]= "catalejo"; char password[9]; cout<<"Entre su password"; cin >> password; if(iguales(vec1,password,0,7)) cout<<"Acceso autorizado"; else cout<<"Clave errada"; }

11 Sumatoria de los n términos de la serie:
1 + 1/2 + 1/4 + 1/8 + 1/16 + … Solución recursiva: 1 + suma(1/2 + 1/4 + 1/8 + 1/16 + …) 1+ 1/2 + suma(1/4 + 1/8 + 1/16 + …) etc. Hasta que se sumen n términos Veamos el código:

12 #include <iostream.h>
#include <math.h> float termino(int i) { return 1/(float)pow(2,i);} float suma(int i, int cuantos) { if(i==cuantos) return termino(i-1); else return termino(i-1) + suma(i+1, cuantos); } void main(void) { int n; cout<< "Entre el número de términos a sumar:"; cin>> n; cout<<suma(1,n);

13 Ejercicios Suponga que no dispone de la función pow, construya un programa recursivo que calcule XY , donde X e Y son números enteros >= 0. Diga que hace la siguiente función: int mistery(int a, int b) { if (b==1) return a; else return a + mistery(a, b-1); } ¿Qué pasa si b es negativo?


Descargar ppt "Estructuras de Datos Ejemplos Recursión."

Presentaciones similares


Anuncios Google