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


 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Ejercicios
| | | |-+  Ejercicios Recursivos en Java y sus Soluciones
0 Usuarios y 2 Visitantes 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 313,210 veces)
vhsreturns

Desconectado Desconectado

Mensajes: 1


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

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 »

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

Bundor


Desconectado Desconectado

Mensajes: 441


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

Chincheta
En línea

DarK_FirefoX


Desconectado Desconectado

Mensajes: 1.220


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 »

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


Ustedes se ríen de mi porque soy diferente, yo me río de ustedes porque son todos iguales
optimus88

Desconectado Desconectado

Mensajes: 4


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

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 »

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 »

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

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 41,027 Último mensaje 7 Agosto 2005, 21:55
por Cobac
soplo pon las soluciones a los ejercicios de VB pliss
Ejercicios
Codename!! 4 4,010 Último mensaje 18 Julio 2004, 08:31
por Codename!!
Ejercicios Java
Ejercicios
Lorena88 1 4,761 Último mensaje 21 Enero 2009, 01:42
por Amerikano|Cls
ejercicios + soluciones en java « 1 2 3 »
Java
.rn3w. 25 13,619 Último mensaje 14 Septiembre 2011, 19:01
por .rn3w.
Regalo para los que empiezar a programar (triangulos recursivos):
Java
4nc3str4l 2 1,687 Último mensaje 25 Enero 2014, 10:01
por DarkSorcerer
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines