elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
27 Mayo 2012, 10:10  


Tema destacado: Sigue las noticias más importantes de elhacker.net en ttwitter!

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Ejercicios
| | | |-+  Ejercicios Recursivos en Java y sus Soluciones
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: Ejercicios Recursivos en Java y sus Soluciones  (Leído 135,551 veces)
ohk


Desconectado Desconectado

Mensajes: 1.577


Some times I think i'm crazy, I'm crazy o so crazy


Ver Perfil WWW
Ejercicios Recursivos en Java y sus Soluciones
« en: 11 Octubre 2008, 03:19 »

Planteamiento del Ejercicio acompañado del algoritmo de resolución en Java

Planteamiento:

Ejercicio 1. Programar un algoritmo recursivo que calcule el factorial de un número.

Solución:

Código
    int factorial(int n){
     if(n==0) return 1;   //AXIOMA
     else return n*factorial(n-1);  //FORMULA RECURSIVA
  }  



Planteamiento:

Ejercicio 2. Programar un algoritmo recursivo que calcule un número de la serie fibonacci.

Solución:

Código
    int fibonaci(int n){
     if(n==1 || n==2) return 1;
     else return fibonaci(n-1)+fibonaci(n-2);
   }  



Planteamiento:

Ejercicio 3. Programar un algoritmo recursivo que permita hacer la división por restas sucesivas.

Solución:

Código
    int division (int a, int b)
   {
if(b > a) return 0;
else
   return division(a-b, b) + 1;
   }
 



Planteamiento:

Ejercicio 4. Programar un algoritmo recursivo que permita invertir un número. Ejemplo: Entrada: 123 Salida: 321

Solución:

Código
     int invertir (int n)
   {
if (n < 10)         //caso base
   return n;
else
   return (n % 10) + invertir (n / 10) * 10;
   }



Planteamiento:

Ejercicio 5. Programar un algoritmo recursivo que permita sumar los dígitos de un número. Ejemplo: Entrada: 123 Resultado:6

Solución:

Código
     int sumar_dig (int n)
   {
if (n == 0)      //caso base
   return n;
else
   return sumar_dig (n / 10) + (n % 10);
   }



Planteamiento:

Ejercicio 6. Programar un algoritmo recursivo que permita hacer una multiplicación, utilizando el método Ruso. Para mas informacion: aqui.

Solución:

Código
     int mult_rusa(int A, int B)
   {
       if(A==1){
   return (B);
}
if(A%2!=0){
return(B+mult_rusa( A/2 , B*2));
}
else{
return(mult_rusa( A/2 , B*2));
}                                
   }



Planteamiento:

Ejercicio 7. Programar un algoritmo recursivo que permita sumar los elementos de un vector.

Solución:

Código
     int suma_vec(int v [], int n)
   {
if (n == 0)
   return v [n];
else
   return suma_vec(v, n - 1) + v [n];
   }



Planteamiento:

Ejercicio 8. Programar un algoritmo recursivo que permita multiplicar los elementos de un vector.

Solución:

Código
     int multiplicar (int vec [], int tam)
   {
if (tam == 0)
   return (vec [0]);
return (vec [tam] * multiplicar (vec, tam - 1));
   }



Planteamiento:

Ejercicio 9. Programar un algoritmo recursivo que calcule el Maximo comun divisor de dos números.

Solución:

Código
    int sacar_mcd(int a, int b) {
       if(b==0)
           return a;
       else
           return sacar_mcd(b, a % b);
   }
 



Planteamiento:

Ejercicio 10. Programar un algoritmo recursivo que determine si un número es positivo.

Solución:

Código
   public boolean positivo(int n){
    if(n>0) return true;
    else return negativo(n);
   }
 
   public boolean negativo(int n){
    if(n<0) return false;
    else return  positivo(n);
   }



Planteamiento:

Ejercicio 11. Programar un algoritmo recursivo que determine si un número es impar utilizando recursividad cruzada.

Solución:

Código
        public boolean par(int n){
if(n==0) return true;
else return impar(n-1);
}
 
public boolean impar(int n){
if(n==0) return false;
else return par(n-1);
}



Planteamiento:

Ejercicio 12. Programar un algoritmo recursivo que permita sumar los elementos de una matriz.

Solución:

Código
     int suma (int fila, int col, int orden, int mat [] [])
   {
if (fila == 0 && col == 0)
   return mat [0] [0];
else
   if (col < 0)
return suma (fila - 1, orden, orden, mat);
   else
return mat [fila] [col] + suma (fila, col - 1, orden, mat);
   }



Planteamiento:

Ejercicio 13. Programar un algoritmo recursivo que permita resolver el cuadro latino. Ejemplo de cuadro latino:

0 0 0 0 1
0 0 0 1 2
0 0 1 2 3
0 1 2 3 4
1 2 3 4 5


Solución:

Código
     latino (int fila, int col, int cont, int orden, int mat [] [])
   {
if (fila == 0 && col == 0)
   mat [0] [0] = 1;
else
   if (fila == col)
latino (fila - 1, orden - 1, orden, orden, mat);
   else
   {
mat [fila] [col] = cont;
latino (fila, col - 1, orden + 1, orden, mat);
   }
   }



Planteamiento:

Ejercicio 14. Programar un algoritmo recursivo que permita resolver la siguiente matriz:

1 1 1 1 1
1 2 2 2 2
1 2 4 4 4
1 2 4 8 8
1 2 4 8 16


Solución: Solucionado por: AmeRiK@nO

Código
public class MatrizRecursividad {
 
private static int a=0, aux=1, b=0; //Declaramos los datos necesarios
private static int[][] matriz = new int[6][6]; //La matriz debe ser cuadrada
 
public static void main(String[] args) {
 
llenarMatriz(matriz, a, b); //Iniciamos el llamado recursivo
imprimir(); //imprimimos la matriz
 
}
 
public static void llenarMatriz(int matriz[][], int i, int j){
 
if(j > matriz.length -1){ //Si llegó a la ultima coluna, reseteamos los datos para la siguiente
i++;
j=0;
aux++;
}
if(i <matriz.length){ // compara que no hallamos llegado al final
 
if(i==(aux-1) && j >= (aux-1)){ //comprueba que estemos en el lugar adecuado, es decir ira imprimiento escaladamente
if(i==0)// si es la primera fila ingresamos aux=1
matriz[i][j] = matriz[i][j]=aux;
else
matriz[i][j] = matriz[i][i-1]*2;//ingresamos el valor correspondiente al ultimo de la "escala" *2
llenarMatriz(matriz, i , j+1);
}
else{ //si no, asignamos los valores anteriores de la escala
if(j==0)// comprobamos si es el primer digito a ingresar
matriz[i][j] = j+1;
else
matriz[i][j] = matriz[i-1][j];// asignamos el mismo numero de la fila anterior (i-1)
llenarMatriz(matriz, i, j+1);
}
}
}
 
public static void imprimir(){ //este metodo nos imprime la matriz por consola
 
for(int i=0; i< matriz.length; i++){
for(int j=0; j< matriz.length; j++){
System.out.print(matriz[i][j] + " ");
}
System.out.print("\n");
}
}
 
}



Planteamiento:

Ejercicio 15. Programar un algoritmo recursivo que ejecute la matriz del cubo mágico.

Solución:

Código
    void magico(int mat [] [], int fil, int colmedio, int c, int n)
   {
if (c == n * n)
{
   mat [n-1] [colmedio] = c;
}
else
{
   if (fil < 0 && colmedio == n)
   {
magico(mat, fil + 2, n - 1, c, n);
   }
   else
   {
if (fil < 0)
{
   magico(mat, n - 1, colmedio, c, n);
}
else
{
   if (colmedio == n)
   {
magico(mat, fil, 0, c, n);
   }
   else
   {
if (mat [fil] [colmedio] == 0)
{
   mat [fil] [colmedio] = c;
   magico(mat, fil - 1, colmedio + 1, c + 1, n);
}
else
{
   magico(mat, fil + 2, colmedio - 1, c, n);
}
   }
}
   }
 
}
   }



Planteamiento:

Ejercicio 16. Programar un algoritmo recursivo que muestre el numero menor de un vector.

Solución:

Código
        int menorvec (int x [], int n, int menor) {
       if (n == 0)
           if (menor > x [n]) return x [0];
           else return menor;
       else
           if (menor > x [n]) return menorvec (x, n - 1, x [n]);
           else return menorvec (x, n - 1, menor); }



Planteamiento:

Ejercicio 17. Programar un algoritmo recursivo que muestre el numero mayor de un vector.

Solución:

Código
        int mayor (int numeros [], int posicion) {
       int aux;
       if (posicion == 0) return numeros [posicion];
       else {
           aux = mayor (numeros, posicion - 1);
           if (numeros [posicion] > aux) return numeros [posicion];
           else return mayor (numeros, posicion - 1);
        }    
       }



Citar
Recursividad

1.1. Introducción.

El concepto de recursividad va ligado al de repetición. Son recursivos aquellos algoritmos que, estando encapsulados dentro de una función, son llamados desde ella misma una y otra vez, en contraposición a los algoritmos iterativos, que hacen uso de bucles while, do-while, for, etc.

1.2. Definición.

Algo es recursivo si se define en términos de sí mismo (cuando para definirse hace mención a sí mismo). Para que una definición recursiva sea válida, la referencia a sí misma debe ser relativamente más sencilla que el caso considerado.
1.3. Elementos de la Recursión

1.3. 1. Axioma

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.

1.3.2. Formula 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.
Por ejemplo: El factorial de un número

factorial(0)   ->  1
factorial(1)   ->  1*factorial(0)
factorial(2)   ->  2*factorial(1)
factorial(3)   ->  3*factorial (2)
…               ->  …
factorial(N)   ->  3*factorial (N-1)

En la resolución de algoritmos recursivos es imprescindible encontrar estos dos elementos.

1.4. Tipos de recursión

1.4.1. Recursividad simple

Aquella en cuya definición sólo aparece una llamada recursiva. Se puede transformar con facilidad en algoritmos iterativos.

1.4.2. Recursividad múltiple
Se da cuando hay más de una llamada a sí misma dentro del cuerpo de la función, resultando más difícil de hacer de forma iterativa. Un ejemplo típico es la función de fibonacci
 
1.4.3. Recursividad anidada
En algunos de los argumentos de la llamada recursiva hay una nueva llamada a sí misma. La función de Ackermann se define por recursividad como sigue:

1.4.4. 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.

OHK


« Última modificación: 15 Marzo 2011, 23:52 por ohk » En línea

Y es que a veces pienso, que si no estubiera loco, no podría salir adelante.
ohk


Desconectado Desconectado

Mensajes: 1.577


Some times I think i'm crazy, I'm crazy o so crazy


Ver Perfil WWW
Re: Ejercicios Revursivos en Java y sus Soluciones
« Respuesta #1 en: 11 Octubre 2008, 03:47 »

Alguien se anima a resolver el ejercicio 14 ?

OHK


« Última modificación: 12 Octubre 2008, 05:53 por ohk » En línea

Y es que a veces pienso, que si no estubiera loco, no podría salir adelante.
Amerikano|Cls


Desconectado Desconectado

Mensajes: 783


[Beyond This Life]


Ver Perfil WWW
Re: Ejercicios Recursivos en Java y sus Soluciones
« Respuesta #2 en: 13 Noviembre 2008, 02:17 »

lo intentare hacer pero necesito tiempo, por que ando ocupado.

amerikano
En línea





Mi blog:
http://amerikanocls.blogspot.com
Amerikano|Cls


Desconectado Desconectado

Mensajes: 783


[Beyond This Life]


Ver Perfil WWW
Re: Ejercicios Recursivos en Java y sus Soluciones
« Respuesta #3 en: 27 Noviembre 2008, 22:30 »

Oye una recomendación, el de fibonnaci no es conveniente hacerlo por recursividad, por lo siguiente, y es que las llamadas recursivas se dividen en dos lo cual conlleva a repetir un mismo proceso mas de dos veces y eso le resta velocidad y eficiencia  :xD era solo eso jeje.

salu2
En línea





Mi blog:
http://amerikanocls.blogspot.com
Amerikano|Cls


Desconectado Desconectado

Mensajes: 783


[Beyond This Life]


Ver Perfil WWW
Re: Ejercicios Recursivos en Java y sus Soluciones
« Respuesta #4 en: 4 Diciembre 2008, 18:38 »



Planteamiento:

Ejercicio 14. Programar un algoritmo recursivo que permita resolver la siguiente matriz:

1 1 1 1 1
1 2 2 2 2
1 2 4 4 4
1 2 4 8 8
1 2 4 8 16


Solución:

Código
No solucionado...


Bueno yo ya solucione el numero 14 jeje estaba facilito solo que no tenia tiempo de hacerlo, aca va:

Código
public class MatrizRecursividad {
 
private static int a=0, aux=1, b=0; //Declaramos los datos necesarios
private static int[][] matriz = new int[6][6]; //La matriz debe ser cuadrada
 
public static void main(String[] args) {
 
llenarMatriz(matriz, a, b); //Iniciamos el llamado recursivo
imprimir(); //imprimimos la matriz
 
}
 
public static void llenarMatriz(int matriz[][], int i, int j){
 
if(j > matriz.length -1){ //Si llegó a la ultima coluna, reseteamos los datos para la siguiente
i++;
j=0;
aux++;
}
if(i <matriz.length){ // compara que no hallamos llegado al final
 
if(i==(aux-1) && j >= (aux-1)){ //comprueba que estemos en el lugar adecuado, es decir ira imprimiento escaladamente
if(i==0)// si es la primera fila ingresamos aux=1
matriz[i][j] = matriz[i][j]=aux;
else
matriz[i][j] = matriz[i][i-1]*2;//ingresamos el valor correspondiente al ultimo de la "escala" *2
llenarMatriz(matriz, i , j+1);
}
else{ //si no, asignamos los valores anteriores de la escala
if(j==0)// comprobamos si es el primer digito a ingresar
matriz[i][j] = j+1;
else
matriz[i][j] = matriz[i-1][j];// asignamos el mismo numero de la fila anterior (i-1)
llenarMatriz(matriz, i, j+1);
}
}
}
 
public static void imprimir(){ //este metodo nos imprime la matriz por consola
 
for(int i=0; i< matriz.length; i++){
for(int j=0; j< matriz.length; j++){
System.out.print(matriz[i][j] + " ");
}
System.out.print("\n");
}
}
 
}
 

Bueno cualquier duda comenten que pa eso estoy  :xD.

salu2

amerikano
En línea





Mi blog:
http://amerikanocls.blogspot.com
ohk


Desconectado Desconectado

Mensajes: 1.577


Some times I think i'm crazy, I'm crazy o so crazy


Ver Perfil WWW
Re: Ejercicios Recursivos en Java y sus Soluciones
« Respuesta #5 en: 4 Diciembre 2008, 20:19 »

@AmeRiK@nO, tu ejercicio corre perfectamente, y el codigo no es dificil de interpretar, porque haces codigo limpio.

Ahora mismo lo agrego tu ejercicio a el espacio que falta.
Gracias por el aporte
Un saludo
En línea

Y es que a veces pienso, que si no estubiera loco, no podría salir adelante.
Amerikano|Cls


Desconectado Desconectado

Mensajes: 783


[Beyond This Life]


Ver Perfil WWW
Re: Ejercicios Recursivos en Java y sus Soluciones
« Respuesta #6 en: 5 Diciembre 2008, 01:49 »

jeje debes corregir esto:

Código
if(i==0)// si es la primera fila ingresamos aux=1
matriz[i][j] = matriz[i][j]=aux;

Vez, lo puse dos veces sin querer, ahora pon solo uno:

Código
if(i==0)// si es la primera fila ingresamos aux=1
matriz[i][j] =aux;

Se me coló uno sin darme cuenta  ;D, pero así y todo funcionó  :), solo era eso.

salu2
En línea





Mi blog:
http://amerikanocls.blogspot.com
ohk


Desconectado Desconectado

Mensajes: 1.577


Some times I think i'm crazy, I'm crazy o so crazy


Ver Perfil WWW
Re: Ejercicios Recursivos en Java y sus Soluciones
« Respuesta #7 en: 5 Diciembre 2008, 03:18 »

jeje debes corregir esto:

Código
if(i==0)// si es la primera fila ingresamos aux=1
matriz[i][j] = matriz[i][j]=aux;

Vez, lo puse dos veces sin querer, ahora pon solo uno:

Código
if(i==0)// si es la primera fila ingresamos aux=1
matriz[i][j] =aux;

Se me coló uno sin darme cuenta  ;D, pero así y todo funcionó  :), solo era eso.

salu2

 :xD

Da igual, ademas quien lo use se dara cuenta  :rolleyes:
En línea

Y es que a veces pienso, que si no estubiera loco, no podría salir adelante.
juancho77


Desconectado Desconectado

Mensajes: 455


rie con demencia


Ver Perfil
Re: Ejercicios Recursivos en Java y sus Soluciones
« Respuesta #8 en: 7 Diciembre 2008, 01:35 »

De todos modos no tiene error, ni sintactico ni semantico.  :P
En línea

pixzeto

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: Ejercicios Recursivos en Java y sus Soluciones
« Respuesta #9 en: 11 Junio 2009, 02:03 »

Estuve practicando con estos ejercicios y parece que el método para invertir un número no funciona bien.

Por ejemplo, si le entregamos el 32, daría:
 2 + invertir(3)*10  =  2 + 3*10  =  32

Código:
     int invertir (int n)
    {
if (n < 10)         //caso base
    return n;
else
    return (n % 10) + invertir (n / 10) * 10;
    }


Pero lo hice así y funciona:
Código:
public int invertirNumero(int numero){
if(numero<10){
return numero;
}else{
int contador = 0;
int aux = numero;
while(aux/10!=0){
contador++;
aux = aux/10;
}
return (int)(Math.pow(10, contador))*(numero%10) + this.invertirNumero(numero/10);
}
}
En línea
Amerikano|Cls


Desconectado Desconectado

Mensajes: 783


[Beyond This Life]


Ver Perfil WWW
Re: Ejercicios Recursivos en Java y sus Soluciones
« Respuesta #10 en: 11 Junio 2009, 02:18 »

Aqui agrego unos mios:

- Determinar si una palabra es Palíndroma:

Código
public boolean palindroma(String palabra, int i, int j){
 
    if(i != (palabra.length()/2)){
        if(palabra.charAt(i) == palabra.charAt(j))
            return palindroma(palabra, ++i, --j);
        else
            return false;
    }
     return true;
}


- Sumar el borde de una matriz de enteros:

Código
public int sumaBorde(int i, int j){
 
    if(i >matriz.length-1)
        return 0;
    else{
        if(j > matriz.length-1 ){
            j=0;
            i++;
            return sumaBorde(i,j);
        }else{
            if((i==0) || (i==matriz.length -1) || (j==0) ||(j==matriz.length -1))
                return matriz[i][j] + sumaBorde(i,j+1);
        }
    }
    return sumaBorde(i,j+1);
}

Salu2
En línea





Mi blog:
http://amerikanocls.blogspot.com
djrocha

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: Ejercicios Recursivos en Java y sus Soluciones
« Respuesta #11 en: 7 Julio 2009, 19:48 »

Buenas tardes:

Me gustaría conocer el código de estos ejercicios implementándolo en ambiente gráfico. Gracias.
En línea
VonN

Desconectado Desconectado

Mensajes: 151


Learnin' Python&C++


Ver Perfil
Re: Ejercicios Recursivos en Java y sus Soluciones
« Respuesta #12 en: 7 Julio 2009, 20:08 »

Es lo mismo.
Son algoritmos, así que puedes implementarlos como función, y luego pasarle los parámetros correspondientes desde tus objetos.

Un saludo
En línea




Se toma por necios a aquellos que dicen lo que todos pesamos
saintmauricioxd

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: Ejercicios Recursivos en Java y sus Soluciones
« Respuesta #13 en: 20 Abril 2010, 18:44 »

Estuve practicando con estos ejercicios y parece que el método para invertir un número no funciona bien.

Por ejemplo, si le entregamos el 32, daría:
 2 + invertir(3)*10  =  2 + 3*10  =  32

Código:
     int invertir (int n)
    {
if (n < 10)         //caso base
    return n;
else
    return (n % 10) + invertir (n / 10) * 10;
    }


Pero lo hice así y funciona:
Código:
public int invertirNumero(int numero){
if(numero<10){
return numero;
}else{
int contador = 0;
int aux = numero;
while(aux/10!=0){
contador++;
aux = aux/10;
}
return (int)(Math.pow(10, contador))*(numero%10) + this.invertirNumero(numero/10);
}
}
Tu algoritmo no es recursivo, recordemos que la recursividad es una alternativa a la iteracion (los bucles for, while no deben usarse al implementar recursividad) pero vale el intento ;)
En línea
cibercito

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: Ejercicios Recursivos en Java y sus Soluciones
« Respuesta #14 en: 18 Junio 2010, 06:27 »

Estuve practicando con estos ejercicios y parece que el método para invertir un número no funciona bien.

Por ejemplo, si le entregamos el 32, daría:
 2 + invertir(3)*10  =  2 + 3*10  =  32

Código:
     int invertir (int n)
    {
if (n < 10)         //caso base
    return n;
else
    return (n % 10) + invertir (n / 10) * 10;
    }


Pero lo hice así y funciona:
Código:
public int invertirNumero(int numero){
if(numero<10){
return numero;
}else{
int contador = 0;
int aux = numero;
while(aux/10!=0){
contador++;
aux = aux/10;
}
return (int)(Math.pow(10, contador))*(numero%10) + this.invertirNumero(numero/10);
}
}
Tu algoritmo no es recursivo, recordemos que la recursividad es una alternativa a la iteracion (los bucles for, while no deben usarse al implementar recursividad) pero vale el intento ;)

Me gustaria una aclaracion sobre recursividad ,ya que sin ella discrepo contigo , porque considero que ese algoritmo si es recursivo por aplicarse el tambien cierto concepto de :" La recursividad simplemente significa aplicar una función como parte de la definición de esa misma función. " . (yo lo entiendo como , si una funcion se llama dentro de su misma funcion = recursividad )
Entonces quisiera saber : si una funcion tiene n bucles PERO SE HACE RECURSIVIDAD (osea el concepto que yo manejo) , el algoritmo es recursivo o deja de serlo por tener n bucles ?.
En línea
Páginas: [1] 2 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Soluciones ejercicios C
Ejercicios
Cobac 13 31,846 Último mensaje 7 Agosto 2005, 21:55
por Cobac
soplo pon las soluciones a los ejercicios de VB pliss
Ejercicios
Codename!! 4 2,785 Último mensaje 18 Julio 2004, 08:31
por Codename!!
2 ejercicios de java
Java
kay19 1 3,089 Último mensaje 28 Agosto 2009, 20:34
por Caballero Maldito
Ejercicios Java
Java
rshocush 12 6,077 Último mensaje 10 Marzo 2010, 15:15
por Mai89
ejercicios + soluciones en java « 1 2 »
Java
bjpenn 25 5,608 Último mensaje 14 Septiembre 2011, 19:01
por bjpenn
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines