Tp0 Recursion Resuelto
1) Determinar el factorial de un número natural n.
--usando la estructura condicional
fac::Integer->Integer
fac(n)=if n==0 then 1
else n*fac(n-1)
--usando varias ecuaciones
fac1(0)=1
fac1(n)=n*fac(n-1)
--usando guardas
fac2::Integer->Integer
fac2 n|n==0 =1
|n>0=n*fac2(n-1)
--codigo en c
#include
int factorial(int n);
main(){
int n;
int fac;
printf("Ingrese un numero natural: ");
scanf("%d", &n);
fac=factorial(n);
printf("El factorial de %d es %d ", n, fac);
system("pause");
}
int factorial(int n){
if (n==0) return 1;
else return (n*factorial(n-1));
}
2) Determinar elproducto de dos números n y m (n≥0, m≥0), usando sumas sucesivas.
--usando condicional
prod::(Integer,Integer)->Integer
prod(n,m)=if (n==0||m==0) then 0
else n+prod(n,m-1)
--usando varias ecuaciones
prod1::(Integer,Integer)->Integer
prod1(n,0)=0
prod1(0,0)=0
prod1(n,m)=n+prod1(n,m-1)
--usando guardas
prod2::(Integer,Integer)->Integer
prod2(0,_)=0
prod2(_,0)=0
prod2(n,m)=n+prod2(n,m-1)
--codigo c
#include
int producto(int n,int m);
main(){
int n,m,prod;
printf("Ingrese un numero: ");
scanf("%d", &n);
printf("Ingrese un numero: ");
scanf("%d", &m);
prod=producto(n,m);
printf("El producto es: %d",prod);
system("pause");
}
int producto(int n,int m){
if (n==0 |m==0) return 0;
else returnn+producto(n,m-1);
}
3) Obtener an con a y n naturales.
--usando estructura condicional
pot::(Int,Int)->Int
pot(a,n)=if (a==0 && n==0) then error "La potencia no esta definida"
else if a==0 then 0
else if n==0 then 1
else a*pot(a,n-1)
--usando varias ecuaciones
pot1::(Int,Int)->Int
pot1(0,0)= error "Potencia no definida"
pot1(0,n)=0
pot1(a,0)=1pot1(a,n)=a*pot1(a,n-1)
--usando guardas
pot2::(Int,Int)->Int
pot2(0,0)=error "Potencia no definida"
pot2(a,n)|n==0 = 1
|a==0 = 0
|otherwise= a*pot2(a,n-1)
--codigo c
#include
int potencia(int base,int exp);
main(){
int a;
int b,pot;
printf("Ingrese la base: ");
scanf("%d", &a);
printf("Ingrese el exponente: ");scanf("%d", &b);
pot=potencia(a,b);
printf("La potencia es: %d", pot);
system("pause");
}
int potencia(int base,int exp){
if (exp==0) return 1;
else return base* potencia(base,exp-1);
}
4) Obtener an con a y n naturales, considerando los casos para los que n pueda ser par e impar.
--estructura condicional
pot::(Int,Int)->Int
pot(a,b)=if (b==0 && a==0)then error "No se puede calcular"
else if (b==0 && a/=0) then 1
else if (a==0 && b/=0) then 0
else if (a/=0 && b==1) then a
else if (b`mod`2==0) then pot(a,c)*pot(a,c)
else a*pot(a,b-1)where
c=b`div`2
--codigo c
#include
int potencia(int base,int exp);
main(){
int a,b,pot;
printf("Ingrese la base: ");
scanf("%d", &a);
printf("Ingrese el exponente: ");
scanf("%d", &b);
pot=potencia(a,b);
printf("La potencia es: %d", pot);
system("pause");
}
intpotencia(int base, int exp){
if (exp==0) return 1;
else{
if (exp%2==0) return (potencia(base,exp/2)* potencia(base,exp/2));
else return base*potencia(base,exp-1);
}
}
5) Determinar la cantidad de dígitos de un número natural n.
--estructura condicional
cantDig::Int->Int
cantDig(n)=if (n>=0) && (n<=9) then 1
else aux(n)
where
aux(n)=if (n==0) then 0...
Regístrate para leer el documento completo.