Laboratorio N 3 Sis

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 7

LABORATORIO N° 3

FUNCIONES RECURSIVIDAD

ESTUDIANTE: SOLARES HUIZA HANS ROMAN


DOCENTE: ING. ELIAS MIRANDA CORTES
AREA: METODOLOGIA DE LA PROGRAMACION II SIS2210” A”
--------------------------------------------------------------------------------------------------------------------
1.DEFINICION.-
Una función es una subrutina o subprograma que forman un programa que realiza tareas bien
definidas. Todo programa en C consta de una o más funciones. Una de estas funciones se llama
main. La ejecución del programa siempre comenzará por la de las instrucciones contenidas en
main. A la función se le puede “pasar” información mediante unos identificadores
denominados argumentos o parámetros.

2.SINTAXIS.-
tipo dato nombre (tipo1 arg1,tipo2 arg2,...,tipon arg n)
{
Accion1;
Accion2;
...
Accion N
}
Donde arg1 es el nombre de una variable

3. TIPO DE PASO DE PARAMETROS.-


* Paso de parámetros por valor
No se modifica el valor de ninguno de los parámetros que son pasados, es decir, cuando se
produce el paso de parámetros, se hace una copia de cada parámetro y se modifica y se
evalúan las copias dentro de la función, hasta que se ejecuta la sentencia return o se sale de la
función es cuando se eliminan las copias existentes y se siguen utilizando las variables que se
habían pasado (por valor) con los valores que tenían cuando se produjo la llamada a la función.

* Paso de parámetros por referencia


En este tipo, sí que se modifica el valor de los parámetros, lo que se pasa no es el valor de la(s)
variable(s), sino la dirección de memoria que ésta(s) ocupa(n), con lo que al modificar su valor
dentro de la función, se modifica también el valor fuera de la función. Cuando se ejecuta la
sentencia return o se salga de la función las variables que se pasaron (por referencia) tienen el
valor que tenían una vez se sale de la función.
RECURSIVIDAD
La recursividad es la propiedad de una función de poder llamarse a si mismo cuando así se
requiera. Si una función ( o Subfunción) requiere volver a ejecutar alguna parte de su código
(sin hacer uso de ciclos de repetición), tan solo se llama a si misma .

Partes de la recursión

1 caso base o de fin de la recursión:


Es un caso donde el problema puede resolverse sin tener que hacer uso de una nueva llamada
a sí mismo. Evita la continuación indefinida de las partes recursivas.

2 parte recursiva:
Relaciona el resultado del algoritmo con resultados de casos más simples. Se hacen nuevas
llamadas a la función, pero están más próximas al caso base.

Los algoritmos recursivos son más simples y compactos que sus correspondientes iterativos,
sin embargo su ejecución en una computadora es más lenta y requiere más recursos.

Tipos de Recursión

Recursividad simple: Aquella en cuya definición sólo aparece una llamada recursiva. Se puede
cambiar a una función con ciclo iterativo.
Recursividad múltiple: Se da cuando hay más de una llamada a sí misma dentro del cuerpo de
la función

Tipos ...

Recursividad anidada: En algunos de los argumentos de la llamada recursiva hay una nueva
llamada a sí misma.
Recursividad cruzada o indirecta: Son algoritmos donde una función provoca una llamada a sí
misma de forma indirecta, a través de otras funciones.

Ejemplo 1.- CONVERTIR UN NUMERO DECIMAL A BINARIO

#include<iostream>

using namespace std;

int binario(int n)
{
if(n>1) binario (n/2);
cout<<n%2;
}
int main(void)
{
int nro;
cout<<" Convertir a binario un numero decimal
"<<endl<<endl;
do
{
cout<<" INGRESE NUMERO DECIMAL: ";
cin>>nro;
if(nro<0) cout<<"\n INGRESE UN NUMERO ENTERO Y POSITIVO...
\n";
}while (nro<0);
cout<<endl;
cout<<"\n Numero:"<<nro<<endl;
cout<<"\n Binario:";
binario(nro);
return 0;
}

Ejemplo 2.- Invertir un numero entero positivo


#include <iostream>
using namespace std;
void invertir(int nro)
{
cout<<nro%10;
if(nro>=10) invertir(nro/10);
}
int main(void)
{
int nro;
cout<<"Invertir numero: "<<endl<<endl;
do
{
cout<<"INGRESE NUMERO: ";
cin>>nro;
if(nro<0)
cout<<"\nINGRESE UN NUMERO ENTERO POSITIVO... \n";
}while(nro<0);
cout<<"\nNUMERO "<<nro;
cout<<"\nINVERTIDO ";
invertir(nro);
cout<<endl<<endl;
return 0;
}

Ejemplo 3.- Encontrar el MCD de 2 números enteros


#include<iostream>

using namespace std;

int mcd(int a, int b)


{
if(b==0) return a;
else mcd(b,a%b);
}
int main(void)
{
int a,b;
cout<<"Calcula el MCD de dos numeros"<<endl<<endl;
do
{
cout<<" INGRESE PRIMER NUMERO: ";
cin>>a;
if(a<0) cout<<"\n INGRESE UN NUMERO ENTERO Y POSITIVO.. \n";
}while(a<0);
do
{
cout<<" INGRESE SEGUNDO NUMERO: ";
cin>>b;
if(b<0) cout<<"\nINGRESE UN NUMERO ENTERO Y POSITIVO... \n";
}while(b<0);
if(a>b)
cout<<"\n MDC( "<<a<<","<<b<<" ) ="<<mcd(a,b)<<endl<<endl;
else
if(a<b)
cout<<"\n MDC( "<<b<<", "<<a<<") ="<<mcd(b,a)<<endl<<endl;
return 0;
}

Problemas Propuestos:

1. Hacer una función recursiva para encontrar la potencia de un número entero positivo
elevado a otro número entero positivo

#include <iostream>

using namespace std;


///Prototipos de funciones
float potencia(float base, int exp);
int main()
{
float base, exp;
float res;
cout << "Introduce la base de la potencia\n";
cin >> base;
cout << "Expontente:\n";
cin >> exp;
res=potencia(base,exp);

cout << "La potencia de " << base << " ^ " << exp << " es
= " << res;

return 1;
}
float potencia(float base, int exp)
{
float res;
if (exp == 0)
res=1.0;
else if (exp > 0)
{
///Llamada a la función con parámetros adecuados
res=base * potencia(base,exp - 1);
}
else if (exp < 0)
{
///Llamada a la función con parámetros adecuados
res= 1.0 / base *potencia(base,exp + 1);

}
return res;
}

2. Utilizar una función recursiva para generar la serie de Fibbonacci de n términos

#include<iostream>
using namespace std;

int fib(int n){

if(n < 2)
return n;

return fib(n-1) + fib(n-2);


}
int main() {
int n;
cout<<"INGRESE EL VALOR QUE SE LLEGARA EN FIBBONACI:
"<<endl;
cin >> n;
fib(n);
cout<<"LA SERIE ES ... "<<endl;
for(int i =0; i < n; i++)
cout <<fib(i) << " ";
return 0;
}

También podría gustarte