Logo Studenta

TEORIA Estructuras y recursividad

¡Estudia con miles de materiales!

Vista previa del material en texto

Estructuras y recursividad
ASESORIA 2020 I
RECURSIVIDAD
Definicion:
Se dice que una función o un programa es recursivo cuando se llama a así mismo
Toda función recursiva tiene 2 componentes.
1º CASO BASE: Se resuelve directamente( con esto se asegura que la recursividad finalize)
2º CASO GENEREAL: Se resuelve aplicando sucesivamente llamadas recursivas a la función. Cada llamada de estas tiene por finalidad acercarse al caso base.
NOTAS IMPORTANTES:
La recursión no es iteración. Esto significa que en la recursión no hay bucles.
La recursión se aplica utilizando solo estructuras de selección o de decisión , es decir:
if , else , if-else, switch ,etc.
EJEMPLO: 
Nos piden realizar un programa que se ejecute la potencia “n” de la base “X”
Int Potencia(int x, int n)
{
	if(n==0) //Caso Base
	return 1;
	else
	return(x*Potencia(x,n-1));
}
Potencia(x,n)={	1 si n=0; 		//caso base
		X*Potencia(x,n-1);	//caso general
	 }
Si ejecutamos 2^6
Potencia(2,6)=2*Potencia(2,5)
Potencia(2,5)=2*Potencia(2,4)
Potencia(2,4)=2*Potencia(2,3)
Potencia(2,3)=2*Potencia(2,2)
Potencia(2,2)=2*Potencia(2,1)
Potencia(2,1)=2*Potencia(2,0)
Potencia(2,0)=1;		//caso base
Potencia(2,6)=2*32=64
DATOS OCULTOS PARA CADENAS Y RECURSIVIDAD
Dado que una cadena es un arreglo de caracteres , se infiere que si la cadena tiene tamaño 1, se puede plantear el caso base.
Si ese carácter es la marca de fin de cadena entonces es mejor.
Ejemplo:
Contar el numero de ocurrencia de un carácter C en la cadena S
CODIGO:
int ContarCaracter(char s[ ], char c)
{
	if(s[0]==‘0’)
	return 0;
	else
	 if(s[0]==c)
		return 1+ContarCaracter(&s[1],c);
	 else
		return ContarCaracter(&s[1],c);	
}
LA LOGICA DEL CODIGO
s[ ]=
Al utilizar &s[1] Esto quiere decir que se va a sobrescribir una cadena nueva que empieza desde la posición 1
ES DECIR :
s[ ]= 
	‘H’	‘O’	‘L’	‘A’	‘ ’	‘C’	‘R’	‘A’	‘C’	‘K’	‘\0’
	0	1	2	3	4	5	6	7	8	9	10
	‘O’	‘L’	‘A’	‘ ’	‘C’	‘R’	‘A’	‘C’	‘K’	‘\0’
	0	1	2	3	4	5	6	7	8	9
COPIAR EL CODIGO DE ESTE PROBLEMA ,ES UN PROBLEMA TIPO DE RECURSIVIDAD. 
UNA PLANCHA PARA LOS PARCIALES. 
ESTRUCTURAS
Una estructura (struct) es un conglomerado de datos.
En un arreglo todos los elementos son del mismo tipo ; mientras que en una estructura de datos son del mismo o diferente tipo de dato
EJEMPLO:
NOTA: La “ ñ ” no está permitida
NOTA2: Los componentes(datos) de una estructura se les denomina también como campos o datos miembros de la estructura 
Struct Tiempo
{
	int hora;
	int min;
	int seg;
}
	TIEMPO
	hora
	min
	seg
OPERADORES DE UNA ESTRUCTURA
C y C++ proporcionan dos operadores para la gestión de los datos miembros de una estructura
1º OPERADOR PUNTO : 
	Permite el acceso directo a un campo de la estructura.
2º OPERADOR FLECHA : 
	Permite el acceso a un campo de la estructura mediante un puntero a ella.
EJEMPLO:
	.
	
	Main
	IngresaPunto
	PrintPunto
	Distancia
CODIGO:
#include <iostream>
using namespace std;
struct Punto
{
	int x;
	int y;
}
void IngresarPunto(Punto &p);
void PrintPunto(Punto p);
double Distancia(Punto p, Punto q);
void IngresarPunto(Punto &p)
{
	cout<<“\nIngrese coordenada x,y del punto : ”;
	cin>>p.x>>p.y;
}
void PrintPunto(Punto p)
{
	cout<<“\nPunto : (”<<p.x<<“ , ”<<p.y<<“) ”<<endl;
}
double Distancia(Punto p, Punto q)
{
	return sqrt( pow (p.x-q.x,2.0)+pow (p.y-q.y,2.0) );
}

Continuar navegando