Upload
osler-meza-torres
View
26
Download
0
Embed Size (px)
DESCRIPTION
programacion digital uni
Citation preview
PROGRAMACION DIGITAL - CB412 CICLO 2015-1 236
PROGRAMACION DIGITAL
FUNCIONES RECURSIVAS
WILFREDO CUPE ROMN
CICLO 2015-1
UNIVERSIDAD NACIONAL DE INGENIERIA
FACULTAD DE INGENIERIA CIVIL
Funcin Recursiva
Una Funcin es recursiva cuando se llama a simisma.Por ejemplo, el factorial de n se puede calcular con una funcin recursiva:
PROGRAMACION DIGITAL - CB412 CICLO 2015-1 237
=
>=
010)1(*)(
n
nnfactnnfact
Diagrama Factorial
PROGRAMACION DIGITAL - CB412 CICLO 2015-1 238
fact(n)
Fin
f 1
return f
f fact(n)Escribir
f
n>0
f n*fact(n-1)
Leern
Inicio
Fin
LLAMADO
DEFINICION
LLAMADORECURSIVO
FV
Definicin de la funcin fact
PROGRAMACION DIGITAL - CB412 CICLO 2015-1 239
//Funciones Recursivas
int fact(int n){
int f;
if(n>0) f=n*fact(n-1);
else f=1;
return f;
}
RECURSIVAS.H (Archivo de cabecera)
Ejercicio
Definir una funcin recursiva que calcule el nmerocombinatorio.
PROGRAMACION DIGITAL - CB412 CICLO 2015-1 240
=
=
=
=
n
mC
nm
m
n
mC
nmn
m
nm
m
nmnmn
mm
nmn
m
n
mC
1)(
)!1(!)!1(
)()!1)((!)!1(
)!(!!
La funcin Combi es recursiva:
PROGRAMACION DIGITAL - CB412 CICLO 2015-1 241
=
>
=
nm
nmnmioCombinatornm
m
nmioCombinator1
),1(),(
Diagrama Combinatorio
PROGRAMACION DIGITAL - CB412 CICLO 2015-1 242
Combi(m,n)
Fin
f 1
return f
c Combi(m,n)Escribir
c
m>n
f m*Combi(m-1,n)/(m-n)
Leerm, n
Inicio
Fin
LLAMADO
DEFINICION
LLAMADO RECURSIVO
FV
Definicin de la funcin Combi
PROGRAMACION DIGITAL - CB412 CICLO 2015-1 243
int Combi(int m,int n){
int f;
if(m>n) f=m*Combi(m-1,n)/(m-n);
else f=1;
return f;
}
RECURSIVAS.H (Archivo de cabecera)
PROGRAMACION DIGITAL - CB412 CICLO 2015-1 244
Ejercicio1Calcular en forma recursiva el mximo comn divisor dedos nmeros
PlanteamientoQue parmetros necesita la funcin?
a por valor (int)b por valor (int)
La funcin retorna un valor?Si, retorna el MCD de a y b.tipo int
=
>=
0%0%)%,(),(
babbababmcd
bamcd
PROGRAMACION DIGITAL - CB412 CICLO 2015-1 245
Diagrama MCD
mcd(a,b)
Fin
m b
return m
m mcd(a,b)Escribir
m
m mcd(b,a%b)
Leera, b
Inicio
Fin
LLAMADO
DEFINICION
LLAMADORECURSIVO
a%b0FV
FUNCION PRINCIPAL
Definicin de la funcin mcdPROGRAMACION DIGITAL - CB412 CICLO 2015-1 246
int mcd(int a,int b){
int m;
if(a%b!=0)
m=mcd(b,a%b);
else
m=b;
return m;
}
RECURSIVAS.H (Archivo de cabecera)
EjercicioEscribir una funcin recursiva que muestre en pantallauna pirmide de h filas formadas por las palabras UNIy FIC.Por ejemplo, para h=7, el resultado sera el siguiente:
UNI
UNI FIC
UNI FIC UNI
UNI FIC UNI FIC
UNI FIC UNI FIC UNI
UNI FIC UNI FIC UNI FIC
UNI FIC UNI FIC UNI FIC UNI
PROGRAMACION DIGITAL - CB412 CICLO 2015-1 247
Planteamiento
UNI
UNI FIC
UNI FIC UNI
UNI FIC UNI FIC
UNI FIC UNI FIC UNI
UNI FIC UNI FIC UNI FIC
UNI FIC UNI FIC UNI FIC UNI
PROGRAMACION DIGITAL - CB412 CICLO 2015-1 248
hFila i-simaHay i palabras
(h-i)*2
Definicin de la funcin UNIFICPROGRAMACION DIGITAL - CB412 CICLO 2015-1 249
void UNIFIC(int h,int i){
int j;
if(i
Ejercicios Propuestos1. Generar con una funcin recursiva los nmeros
de la serie de Fibonacci: 1, 1, 2, 3, 5, 8, 13,
2. Calcular con una funcin recursiva el seno de xutilizando la serie de Maclaurin:
PROGRAMACION DIGITAL - CB412 CICLO 2015-1 250
=
++++=
+
..0,)!12()1(...!7!5!3)()12(753
ii
xxxxxxseno
ii
EjercicioGenerar los nmeros de la serie de Fibonacci:1, 1, 2, 3, 5, 8, 13, 21, Fibo1=1Fibo2=1Fibo3=Fibo1+Fibo2Fibo4=Fibo2+Fibo3
Fiboi=Fiboi-2+Fiboi-1
PROGRAMACION DIGITAL - CB412 CICLO 2015-1 251
>+
=
212)1()2()(
n
nnFibonFibonFibo
PROGRAMACION DIGITAL - CB412 CICLO 2015-1 252
/*Numeros de Fibonacci con Recursividad*/
#include
#include
int Fibo(int n);
int main(){
int n,i,f;
printf("Ingrese n: "); scanf("%d",&n);
for(i=1;i2)
f = Fibo(n-2)+Fibo(n-1); /*Llamado Recursivo*/
else
f = 1;
return f;
}
Ejercicio
Calcular con una funcin recursiva el seno de xutilizando la serie de Maclaurin:
PROGRAMACION DIGITAL - CB412 CICLO 2015-1 253
+
+
=
=
++++=
+
)12(*2*)!12(...5*4*63*2*)(
..0,)!12()1(...!7!5!3)(
212232
)12(753
iix
ixxxx
xxxseno
ii
xxxxxxseno
i
ii
Factor
t = termino i
4444 34444 21
44 844 7648476termino i-1
La funcin Serie es recursiva:
PROGRAMACION DIGITAL - CB412 CICLO 2015-1 254
>++
=
errort
errorttixSeriettixSerie
0),1,(),,(
410 =error
)1*2(**2* 2
+=
iixtt
PROGRAMACION DIGITAL - CB412 CICLO 2015-1 255
/*Serie seno(x) con Recursividad*/
#include
#include
double Serie(float x,int i, double t);
int main(){
int i; float x,t; double s;
printf("Ingrese x: "); scanf("%f",&x);
i=1;
t=x;
s = x + Serie(x,i,t); /*1er Llamado*/
printf("Serie = %.5lf\n",s);
}
double Serie(float x,int i, double t){
double u,s;
t = -t*x*x/(2*i*(2*i+1));
if(fabs(t)>0.0001)
s = t + Serie(x,i + 1,t); /*Llamado Recursivo*/
else
s = t;
return s;
}