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

 

 


Tema destacado: Estamos en la red social de Mastodon


  Mostrar Mensajes
Páginas: [1]
1  Programación / Ejercicios / Re: Ejercicios Recursivos en Java y sus Soluciones 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.
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines