elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  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 4 [5] Ir Abajo Respuesta Imprimir
Autor Tema: Ejercicios Recursivos en Java y sus Soluciones  (Leído 426,785 veces)
vhsreturns

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: Ejercicios Recursivos en Java y sus Soluciones
« Respuesta #40 en: 9 Diciembre 2013, 14:09 pm »

Después de bastantes vueltas conseguí el código jajajaja No se como pones esas tablitas tan bonitas que poneis vosotros, pero os lo pego aqui a ver si alguno puede hacerme el favor de ponerlo bien :)

/**
    * subprograma que recoje un número por teclado y lo devuelve invertido en el orden
    * @param num (numero que recojemos por teclado y queremos invertir)
    * @return resultado (numero invertido)
    */
   public static String invertir (int num){
      String resultado = "";
      if (num < 10) //caso base
         resultado = resultado + num;
      else { //caso general
         resultado = invertir (num / 10);
         resultado = ((num % 10)+" , ") + resultado;
      }
      return resultado;
   }


En línea

kakimanu

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: Ejercicios Recursivos en Java y sus Soluciones
« Respuesta #41 en: 27 Septiembre 2014, 18:30 pm »

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

Pero si que es conveniente si lo haces con memoria, esto lo que hará es ahorrar un gran número de operaciones ya que las que ya ha calculado las guarda en un mapa y cuando se necesita se utilizan los resultados guardados:

Código
  1. public static int fibonacciMemoria(int n, Map<Integer, Integer> m){
  2.  
  3. int res = 0;
  4.  
  5. if(n<=1){
  6. return n;
  7. }else{
  8. int fibon1 = 0;
  9. int fibon2 = 0;
  10. if(m.containsKey(n-1)){
  11. fibon1 = m.get(n-1);
  12. }else{
  13. fibon1 = fibonacciMemoria(n-1,m);
  14. }
  15.  
  16. if(m.containsKey(n-2)){
  17. fibon2 = m.get(n-2);
  18. }else{
  19. fibon2 = fibonacciMemoria(n-2,m);
  20. }
  21.  
  22. res = fibon1+fibon2;
  23. m.put(n, res);
  24. }
  25.  
  26. return res;
  27.  
  28. }

Y ya si quieres calcular con números mas grandes puedes hacerlo con BigInteger de igual forma:

Código
  1. public static BigInteger fibonacciGrande(BigInteger n, Map<BigInteger, BigInteger> m){
  2.  
  3. BigInteger res = new BigInteger("0");
  4.  
  5. if(n.compareTo(new BigInteger("1"))<=0){
  6. return n;
  7. }else{
  8. BigInteger fibon1 = new BigInteger("0");
  9. BigInteger fibon2 = new BigInteger("0");
  10. if(m.containsKey(n.subtract(new BigInteger("1")))){
  11. fibon1 = m.get(n.subtract(new BigInteger("1")));
  12. }else{
  13. fibon1 = fibonacciGrande(n.subtract(new BigInteger("1")),m);
  14. }
  15.  
  16. if(m.containsKey(n.subtract(new BigInteger("2")))){
  17. fibon2 = m.get(n.subtract(new BigInteger("2")));
  18. }else{
  19. fibon2 = fibonacciGrande(n.subtract(new BigInteger("2")),m);
  20. }
  21.  
  22. res = fibon1.add(fibon2);
  23. m.put(n, res);
  24. }
  25.  
  26. return res;
  27.  
  28. }

Un saludo.


En línea

Minusfour_cierralo_o_baneamefull


Desconectado Desconectado

Mensajes: 571


Ver Perfil
Re: Ejercicios Recursivos en Java y sus Soluciones
« Respuesta #42 en: 18 Octubre 2014, 05:44 am »

Chincheta
En línea

DarK_FirefoX


Desconectado Desconectado

Mensajes: 1.263


Be the change you wanna see in te world


Ver Perfil
Re: Ejercicios Recursivos en Java y sus Soluciones
« Respuesta #43 en: 18 Octubre 2014, 07:05 am »

Pero si que es conveniente si lo haces con memoria, esto lo que hará es ahorrar un gran número de operaciones ya que las que ya ha calculado las guarda en un mapa y cuando se necesita se utilizan los resultados guardados:

Código
  1. public static int fibonacciMemoria(int n, Map<Integer, Integer> m){
  2.  
  3. int res = 0;
  4.  
  5. if(n<=1){
  6. return n;
  7. }else{
  8. int fibon1 = 0;
  9. int fibon2 = 0;
  10. if(m.containsKey(n-1)){
  11. fibon1 = m.get(n-1);
  12. }else{
  13. fibon1 = fibonacciMemoria(n-1,m);
  14. }
  15.  
  16. if(m.containsKey(n-2)){
  17. fibon2 = m.get(n-2);
  18. }else{
  19. fibon2 = fibonacciMemoria(n-2,m);
  20. }
  21.  
  22. res = fibon1+fibon2;
  23. m.put(n, res);
  24. }
  25.  
  26. return res;
  27.  
  28. }

Y ya si quieres calcular con números mas grandes puedes hacerlo con BigInteger de igual forma:

Código
  1. public static BigInteger fibonacciGrande(BigInteger n, Map<BigInteger, BigInteger> m){
  2.  
  3. BigInteger res = new BigInteger("0");
  4.  
  5. if(n.compareTo(new BigInteger("1"))<=0){
  6. return n;
  7. }else{
  8. BigInteger fibon1 = new BigInteger("0");
  9. BigInteger fibon2 = new BigInteger("0");
  10. if(m.containsKey(n.subtract(new BigInteger("1")))){
  11. fibon1 = m.get(n.subtract(new BigInteger("1")));
  12. }else{
  13. fibon1 = fibonacciGrande(n.subtract(new BigInteger("1")),m);
  14. }
  15.  
  16. if(m.containsKey(n.subtract(new BigInteger("2")))){
  17. fibon2 = m.get(n.subtract(new BigInteger("2")));
  18. }else{
  19. fibon2 = fibonacciGrande(n.subtract(new BigInteger("2")),m);
  20. }
  21.  
  22. res = fibon1.add(fibon2);
  23. m.put(n, res);
  24. }
  25.  
  26. return res;
  27.  
  28. }

Un saludo.

Exactamente como dice kakimanu, se puede hacer el fibonacci de forma dinámica, aqui les dejo un ejemplo recursivo de la forma dinamica manteniendo los valores ya calculados en un array de long, a mi entender un poquito más sencilla.

Código
  1. static void Main(string[] args)
  2.        {
  3.            long n = long.Parse(Console.ReadLine()); //Se solicita el termino de fibonacci a calcular
  4.            fibonacci = new long[n+1];
  5.            Console.WriteLine(Fibonacci(n));
  6.  
  7.        }
  8.  
  9.        static long Fibonacci(long n)
  10.        {
  11.            if (fibonacci[n] != 0) //Se verifica si no se calculo ya
  12.                return fibonacci[n]; //Se devuelve si ya se calculo
  13.            if (n == 1 || n==2)
  14.                return 1;
  15.            fibonacci[n - 2] = Fibonacci(n - 2); //se guarda en el array
  16.            fibonacci[n - 1] = Fibonacci(n - 1); //se guarda en el array
  17.            return fibonacci[n - 2] + fibonacci[n - 1];
  18.        }
En línea

optimus88

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Ejercicios Recursivos en Java y sus Soluciones
« Respuesta #44 en: 6 Noviembre 2014, 19:27 pm »

n problema de recursividad en C , de la expresion de abajo hay que sacar una definicion de recursividad mostrando el caso base y la funcion recursiva.
El problema es este:

El número de euler es ampliamente utilizado
en el cálculo matemático pero que no puede
ser expresado con un número de decimales
finito. Tiene un valor aproximado de 2,718.
Para poder obtener aproximaciones de
dicho número existen diferentes reglas que
pueden ser aplicadas. Siguiendo un desarrollo
decimal como el mostrado en la figura, puede
obtenerse el número e.
Para poder realizar un algoritmo que realice dicho cálculo aproximado se
requiere crear una función con el siguiente prototipo:
float f_euler(int n)
Esta función devolverá la aproximación del número e aplicando n desarrollos.
Como puede suponer, mientras más grande sea n (más desarrollos serán aplicados),
mejor será la aproximación. Considere los siguientes ejemplos:
f_euler(0)=2
f_euler(1)=2+ 2/2=3
f_euler(2)=2+ 2/(2+ 3/3)= 2.6666…
f_euler(5)=2+ 2/(2+ 3/(3+ 4/(4+ 5/(5+6/6)))))= 2.7184…
En línea

konika_bn

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Ejercicios Recursivos en Java y sus Soluciones
« Respuesta #45 en: 17 Noviembre 2015, 11:57 am »

Buenas, tengo que hacer este problema de forma recursiva. Sólo se me ocurre implementarlo, pero de forma normal, es decir sin recursión. Si me pudiérais ayudar os lo agradecería.

La factorización de números enteros consiste en descomponer un número compuesto (no primo) en divisores no triviales que cuando se multiplican dan el número original. Para nuestro propósito académico queremos implementar una función recursiva que devuelva el número de divisores distintos de un número dado. Por ejemplo, el número 20 tiene 6 divisores: 1, 2, 4, 5, 10 y 20.
En línea

chiche92

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Ejercicios Recursivos en Java y sus Soluciones
« Respuesta #46 en: 29 Noviembre 2015, 04:06 am »

Hola, estoy empezando con java estoy en primer año, tengo un problema de recursion que aún no pude solucionar y se me acaba el tiempo, si ustedes pudieran indicarme el camino o resolverlo me ayudarian mucho.

El ejercicio es el siguiente:

Escribir un método recursivo int vocales(String cd) para calcular el número de vocales de una cadena.

Muchas gracias..
En línea

abelvaldez

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Ejercicios Recursivos en Java y sus Soluciones
« Respuesta #47 en: 20 Febrero 2018, 01:33 am »

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);
}
}

Hola Aqui un aporte  :),
utilize String length para identificar el tipo de unidad (../centena/decena) en cada caso.

Código:
  int invertir(int n){

            if (n < 10)         //caso base
                return n;

            return invertir(n / 10) + (n % 10) * (int) Math.Pow(10, ((n + "").Length-1));          
            
        }

Y para fibonacci :

       
Código:
 int fibonaci(int [] array, int n) {

            if (array[n-1] > 0) {
                return array[n-1];
            }

            if (n == 1 || n == 2)
            {
                return 1;
            }
            else {

                var a = fibonaci(array ,n - 1);
                var b = fibonaci(array ,n - 2);
                var sum = a + b;
                array[n - 1] = sum;
                 return sum;
            }
        }
« Última modificación: 20 Febrero 2018, 01:45 am por abelvaldez » En línea

jaker250per

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Ejercicios Recursivos en Java y sus Soluciones
« Respuesta #48 en: 30 Diciembre 2021, 03:20 am »

10512[/glow][/s][/i]ww
En línea

jaker250per

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Ejercicios Recursivos en Java y sus Soluciones
« Respuesta #49 en: 30 Diciembre 2021, 03:22 am »

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

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

Páginas: 1 2 3 4 [5] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Soluciones ejercicios C « 1 2 »
Ejercicios
Cobac 13 51,862 Último mensaje 7 Agosto 2005, 21:55 pm
por Cobac
soplo pon las soluciones a los ejercicios de VB pliss
Ejercicios
Codename!! 4 7,062 Último mensaje 18 Julio 2004, 08:31 am
por Codename!!
Ejercicios Java
Ejercicios
Lorena88 1 7,359 Último mensaje 21 Enero 2009, 01:42 am
por Amerikano|Cls
2 ejercicios de java
Java
kay19 1 9,280 Último mensaje 28 Agosto 2009, 20:34 pm
por Caballero Maldito
ejercicios + soluciones en java « 1 2 3 »
Java
bengy 25 24,623 Último mensaje 14 Septiembre 2011, 19:01 pm
por bengy
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines