Autor
|
Tema: Ejercicios Recursivos en Java y sus Soluciones (Leído 427,031 veces)
|
vhsreturns
Desconectado
Mensajes: 1
|
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
Mensajes: 1
|
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 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: public static int fibonacciMemoria(int n, Map<Integer, Integer> m){ int res = 0; if(n<=1){ return n; }else{ int fibon1 = 0; int fibon2 = 0; if(m.containsKey(n-1)){ fibon1 = m.get(n-1); }else{ fibon1 = fibonacciMemoria(n-1,m); } if(m.containsKey(n-2)){ fibon2 = m.get(n-2); }else{ fibon2 = fibonacciMemoria(n-2,m); } res = fibon1+fibon2; m.put(n, res); } return res; }
Y ya si quieres calcular con números mas grandes puedes hacerlo con BigInteger de igual forma: return n; }else{ if(m. containsKey(n. subtract(new BigInteger("1")))){ }else{ fibon1 = fibonacciGrande (n. subtract(new BigInteger("1")),m ); } if(m. containsKey(n. subtract(new BigInteger("2")))){ }else{ fibon2 = fibonacciGrande (n. subtract(new BigInteger("2")),m ); } res = fibon1.add(fibon2); m.put(n, res); } return res; }
Un saludo.
|
|
|
En línea
|
|
|
|
|
DarK_FirefoX
Desconectado
Mensajes: 1.263
Be the change you wanna see in te world
|
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: public static int fibonacciMemoria(int n, Map<Integer, Integer> m){ int res = 0; if(n<=1){ return n; }else{ int fibon1 = 0; int fibon2 = 0; if(m.containsKey(n-1)){ fibon1 = m.get(n-1); }else{ fibon1 = fibonacciMemoria(n-1,m); } if(m.containsKey(n-2)){ fibon2 = m.get(n-2); }else{ fibon2 = fibonacciMemoria(n-2,m); } res = fibon1+fibon2; m.put(n, res); } return res; }
Y ya si quieres calcular con números mas grandes puedes hacerlo con BigInteger de igual forma: return n; }else{ if(m. containsKey(n. subtract(new BigInteger("1")))){ }else{ fibon1 = fibonacciGrande (n. subtract(new BigInteger("1")),m ); } if(m. containsKey(n. subtract(new BigInteger("2")))){ }else{ fibon2 = fibonacciGrande (n. subtract(new BigInteger("2")),m ); } res = fibon1.add(fibon2); m.put(n, res); } return res; }
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. static void Main(string[] args) { long n = long.Parse(Console.ReadLine()); //Se solicita el termino de fibonacci a calcular fibonacci = new long[n +1]; Console.WriteLine(Fibonacci(n)); } static long Fibonacci(long n) { if (fibonacci[n] != 0) //Se verifica si no se calculo ya return fibonacci[n]; //Se devuelve si ya se calculo if (n == 1 || n==2) return 1; fibonacci[n - 2] = Fibonacci(n - 2); //se guarda en el array fibonacci[n - 1] = Fibonacci(n - 1); //se guarda en el array return fibonacci[n - 2] + fibonacci[n - 1]; }
|
|
|
En línea
|
|
|
|
optimus88
Desconectado
Mensajes: 4
|
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
Mensajes: 2
|
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
Mensajes: 2
|
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
Mensajes: 6
|
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 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: 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. 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 : 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
Mensajes: 2
|
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Soluciones ejercicios C
« 1 2 »
Ejercicios
|
Cobac
|
13
|
51,900
|
7 Agosto 2005, 21:55 pm
por Cobac
|
|
|
soplo pon las soluciones a los ejercicios de VB pliss
Ejercicios
|
Codename!!
|
4
|
7,076
|
18 Julio 2004, 08:31 am
por Codename!!
|
|
|
Ejercicios Java
Ejercicios
|
Lorena88
|
1
|
7,371
|
21 Enero 2009, 01:42 am
por Amerikano|Cls
|
|
|
2 ejercicios de java
Java
|
kay19
|
1
|
9,292
|
28 Agosto 2009, 20:34 pm
por Caballero Maldito
|
|
|
ejercicios + soluciones en java
« 1 2 3 »
Java
|
bengy
|
25
|
24,671
|
14 Septiembre 2011, 19:01 pm
por bengy
|
|