Tp0 Recursion Resuelto

Páginas: 16 (3926 palabras) Publicado: 4 de abril de 2015
Para cada ejercicio escribir un algoritmo recursivo y su programa en los lenguajes C y Haskell.
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...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Recursion
  • recursion
  • Recursion
  • Recursion Assigment
  • Recursion 2
  • Recursiones fibonacci
  • Resueltos
  • resueltos

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS