Foro de elhacker.net

Programación => Ejercicios => Mensaje iniciado por: :ohk<any> en 11 Octubre 2008, 03:19



Título: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: :ohk<any> 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
  1.    int factorial(int n){
  2.      if(n==0) return 1;   //AXIOMA
  3.      else return n*factorial(n-1);  //FORMULA RECURSIVA
  4.   }  



Planteamiento:

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

Solución:

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



Planteamiento:

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

Solución:

Código
  1.    int division (int a, int b)
  2.    {
  3. if(b > a) return 0;
  4. else
  5.    return division(a-b, b) + 1;
  6.    }
  7.  



Planteamiento:

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

Solución:

Código
  1.     int invertir (int n)
  2.    {
  3. if (n < 10)         //caso base
  4.    return n;
  5. else
  6.    return (n % 10) + invertir (n / 10) * 10;
  7.    }



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
  1.     int sumar_dig (int n)
  2.    {
  3. if (n == 0)      //caso base
  4.    return n;
  5. else
  6.    return sumar_dig (n / 10) + (n % 10);
  7.    }



Planteamiento:

Ejercicio 6. Programar un algoritmo recursivo que permita hacer una multiplicación, utilizando el método Ruso. Para mas informacion: aqui (http://es.wikipedia.org/wiki/Multiplicación_por_duplicación).

Solución:

Código
  1.     int mult_rusa(int A, int B)
  2.    {
  3.        if(A==1){
  4.    return (B);
  5. }
  6. if(A%2!=0){
  7. return(B+mult_rusa( A/2 , B*2));
  8. }
  9. else{
  10. return(mult_rusa( A/2 , B*2));
  11. }                                
  12.    }



Planteamiento:

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

Solución:

Código
  1.     int suma_vec(int v [], int n)
  2.    {
  3. if (n == 0)
  4.    return v [n];
  5. else
  6.    return suma_vec(v, n - 1) + v [n];
  7.    }



Planteamiento:

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

Solución:

Código
  1.     int multiplicar (int vec [], int tam)
  2.    {
  3. if (tam == 0)
  4.    return (vec [0]);
  5. return (vec [tam] * multiplicar (vec, tam - 1));
  6.    }



Planteamiento:

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

Solución:

Código
  1.    int sacar_mcd(int a, int b) {
  2.        if(b==0)
  3.            return a;
  4.        else
  5.            return sacar_mcd(b, a % b);
  6.    }
  7.  



Planteamiento:

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

Solución:

Código
  1.   public boolean positivo(int n){
  2.     if(n>0) return true;
  3.     else return negativo(n);
  4.    }
  5.  
  6.    public boolean negativo(int n){
  7.     if(n<0) return false;
  8.     else return  positivo(n);
  9.    }



Planteamiento:

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

Solución:

Código
  1.        public boolean par(int n){
  2. if(n==0) return true;
  3. else return impar(n-1);
  4. }
  5.  
  6. public boolean impar(int n){
  7. if(n==0) return false;
  8. else return par(n-1);
  9. }



Planteamiento:

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

Solución:

Código
  1.     int suma (int fila, int col, int orden, int mat [] [])
  2.    {
  3. if (fila == 0 && col == 0)
  4.    return mat [0] [0];
  5. else
  6.    if (col < 0)
  7. return suma (fila - 1, orden, orden, mat);
  8.    else
  9. return mat [fila] [col] + suma (fila, col - 1, orden, mat);
  10.    }



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
  1.     latino (int fila, int col, int cont, int orden, int mat [] [])
  2.    {
  3. if (fila == 0 && col == 0)
  4.    mat [0] [0] = 1;
  5. else
  6.    if (fila == col)
  7. latino (fila - 1, orden - 1, orden, orden, mat);
  8.    else
  9.    {
  10. mat [fila] [col] = cont;
  11. latino (fila, col - 1, orden + 1, orden, mat);
  12.    }
  13.    }



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
  1. public class MatrizRecursividad {
  2.  
  3. private static int a=0, aux=1, b=0; //Declaramos los datos necesarios
  4. private static int[][] matriz = new int[6][6]; //La matriz debe ser cuadrada
  5.  
  6. public static void main(String[] args) {
  7.  
  8. llenarMatriz(matriz, a, b); //Iniciamos el llamado recursivo
  9. imprimir(); //imprimimos la matriz
  10.  
  11. }
  12.  
  13. public static void llenarMatriz(int matriz[][], int i, int j){
  14.  
  15. if(j > matriz.length -1){ //Si llegó a la ultima coluna, reseteamos los datos para la siguiente
  16. i++;
  17. j=0;
  18. aux++;
  19. }
  20. if(i <matriz.length){ // compara que no hallamos llegado al final
  21.  
  22. if(i==(aux-1) && j >= (aux-1)){ //comprueba que estemos en el lugar adecuado, es decir ira imprimiento escaladamente
  23. if(i==0)// si es la primera fila ingresamos aux=1
  24. matriz[i][j] = matriz[i][j]=aux;
  25. else
  26. matriz[i][j] = matriz[i][i-1]*2;//ingresamos el valor correspondiente al ultimo de la "escala" *2
  27. llenarMatriz(matriz, i , j+1);
  28. }
  29. else{ //si no, asignamos los valores anteriores de la escala
  30. if(j==0)// comprobamos si es el primer digito a ingresar
  31. matriz[i][j] = j+1;
  32. else
  33. matriz[i][j] = matriz[i-1][j];// asignamos el mismo numero de la fila anterior (i-1)
  34. llenarMatriz(matriz, i, j+1);
  35. }
  36. }
  37. }
  38.  
  39. public static void imprimir(){ //este metodo nos imprime la matriz por consola
  40.  
  41. for(int i=0; i< matriz.length; i++){
  42. for(int j=0; j< matriz.length; j++){
  43. System.out.print(matriz[i][j] + " ");
  44. }
  45. System.out.print("\n");
  46. }
  47. }
  48.  
  49. }



Planteamiento:

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

Solución:

Código
  1.    void magico(int mat [] [], int fil, int colmedio, int c, int n)
  2.    {
  3. if (c == n * n)
  4. {
  5.    mat [n-1] [colmedio] = c;
  6. }
  7. else
  8. {
  9.    if (fil < 0 && colmedio == n)
  10.    {
  11. magico(mat, fil + 2, n - 1, c, n);
  12.    }
  13.    else
  14.    {
  15. if (fil < 0)
  16. {
  17.    magico(mat, n - 1, colmedio, c, n);
  18. }
  19. else
  20. {
  21.    if (colmedio == n)
  22.    {
  23. magico(mat, fil, 0, c, n);
  24.    }
  25.    else
  26.    {
  27. if (mat [fil] [colmedio] == 0)
  28. {
  29.    mat [fil] [colmedio] = c;
  30.    magico(mat, fil - 1, colmedio + 1, c + 1, n);
  31. }
  32. else
  33. {
  34.    magico(mat, fil + 2, colmedio - 1, c, n);
  35. }
  36.    }
  37. }
  38.    }
  39.  
  40. }
  41.    }



Planteamiento:

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

Solución:

Código
  1.        int menorvec (int x [], int n, int menor) {
  2.        if (n == 0)
  3.            if (menor > x [n]) return x [0];
  4.            else return menor;
  5.        else
  6.            if (menor > x [n]) return menorvec (x, n - 1, x [n]);
  7.            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
  1.        int mayor (int numeros [], int posicion) {
  2.        int aux;
  3.        if (posicion == 0) return numeros [posicion];
  4.        else {
  5.            aux = mayor (numeros, posicion - 1);
  6.            if (numeros [posicion] > aux) return numeros [posicion];
  7.            else return mayor (numeros, posicion - 1);
  8.         }    
  9.        }



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


Título: Re: Ejercicios Revursivos en Java y sus Soluciones
Publicado por: :ohk<any> en 11 Octubre 2008, 03:47
Alguien se anima a resolver el ejercicio 14 ?

OHK


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: Amerikano|Cls en 13 Noviembre 2008, 02:17
lo intentare hacer pero necesito tiempo, por que ando ocupado.

amerikano


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: Amerikano|Cls 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


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: Amerikano|Cls 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
  1. No solucionado...


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

Código
  1. public class MatrizRecursividad {
  2.  
  3. private static int a=0, aux=1, b=0; //Declaramos los datos necesarios
  4. private static int[][] matriz = new int[6][6]; //La matriz debe ser cuadrada
  5.  
  6. public static void main(String[] args) {
  7.  
  8. llenarMatriz(matriz, a, b); //Iniciamos el llamado recursivo
  9. imprimir(); //imprimimos la matriz
  10.  
  11. }
  12.  
  13. public static void llenarMatriz(int matriz[][], int i, int j){
  14.  
  15. if(j > matriz.length -1){ //Si llegó a la ultima coluna, reseteamos los datos para la siguiente
  16. i++;
  17. j=0;
  18. aux++;
  19. }
  20. if(i <matriz.length){ // compara que no hallamos llegado al final
  21.  
  22. if(i==(aux-1) && j >= (aux-1)){ //comprueba que estemos en el lugar adecuado, es decir ira imprimiento escaladamente
  23. if(i==0)// si es la primera fila ingresamos aux=1
  24. matriz[i][j] = matriz[i][j]=aux;
  25. else
  26. matriz[i][j] = matriz[i][i-1]*2;//ingresamos el valor correspondiente al ultimo de la "escala" *2
  27. llenarMatriz(matriz, i , j+1);
  28. }
  29. else{ //si no, asignamos los valores anteriores de la escala
  30. if(j==0)// comprobamos si es el primer digito a ingresar
  31. matriz[i][j] = j+1;
  32. else
  33. matriz[i][j] = matriz[i-1][j];// asignamos el mismo numero de la fila anterior (i-1)
  34. llenarMatriz(matriz, i, j+1);
  35. }
  36. }
  37. }
  38.  
  39. public static void imprimir(){ //este metodo nos imprime la matriz por consola
  40.  
  41. for(int i=0; i< matriz.length; i++){
  42. for(int j=0; j< matriz.length; j++){
  43. System.out.print(matriz[i][j] + " ");
  44. }
  45. System.out.print("\n");
  46. }
  47. }
  48.  
  49. }
  50.  

Bueno cualquier duda comenten que pa eso estoy  :xD.

salu2

amerikano


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: :ohk<any> 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


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: Amerikano|Cls en 5 Diciembre 2008, 01:49
jeje debes corregir esto:

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

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

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

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

salu2


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: :ohk<any> en 5 Diciembre 2008, 03:18
jeje debes corregir esto:

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

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

Código
  1. if(i==0)// si es la primera fila ingresamos aux=1
  2. 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:


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: juancho77 en 7 Diciembre 2008, 01:35
De todos modos no tiene error, ni sintactico ni semantico.  :P


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: pixzeto 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);
}
}


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: Amerikano|Cls en 11 Junio 2009, 02:18
Aqui agrego unos mios:

- Determinar si una palabra es Palíndroma:

Código
  1. public boolean palindroma(String palabra, int i, int j){
  2.  
  3.     if(i != (palabra.length()/2)){
  4.         if(palabra.charAt(i) == palabra.charAt(j))
  5.             return palindroma(palabra, ++i, --j);
  6.         else
  7.             return false;
  8.     }
  9.      return true;
  10. }


- Sumar el borde de una matriz de enteros:

Código
  1. public int sumaBorde(int i, int j){
  2.  
  3.     if(i >matriz.length-1)
  4.         return 0;
  5.     else{
  6.         if(j > matriz.length-1 ){
  7.             j=0;
  8.             i++;
  9.             return sumaBorde(i,j);
  10.         }else{
  11.             if((i==0) || (i==matriz.length -1) || (j==0) ||(j==matriz.length -1))
  12.                 return matriz[i][j] + sumaBorde(i,j+1);
  13.         }
  14.     }
  15.     return sumaBorde(i,j+1);
  16. }

Salu2


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: djrocha 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.


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: VonN 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


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: saintmauricioxd 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 ;)


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: cibercito 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 ?.


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: leogtz en 18 Junio 2010, 21:09
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 ;)

Mal, muy mal, los ciclos no tienen nada que ver con la recursividad, repasa tus apuntes.

Y como prueba, observa algunos algoritmos recursivos, como la ordenación quicksort.

http://es.wikipedia.org/wiki/Quicksort


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: shigure-dark en 26 Agosto 2010, 06:50
estoy realizando un ejercicio donde ya realise un programa en el cual ingreso un numero positivo y este me genera la tabla de multiplicar hasta el 10

el asunto es que no tengo ni la mas minima idea de como hacer que este se vulva recursivo ya que en todas las veces que se comento en ninguna el programa esta echo como mi profesora me lo enseño.


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: espabe en 6 Octubre 2010, 06:44
Hola amigos! estoy llevando un curso de informatica pero yo soy un principiante en la materia. Quisiera saber como ustedes harían un programa con las siguientes normas:

 Implemente, tanto de forma recursiva como de forma iterativa, un método que nos devuelva el máximo común divisor de dos números enteros utilizando el algoritmo de Euclides.
ALGORITMO DE EUCLIDES
Dados dos números enteros positivos m y n, tal que m > n, para encontrar su máximo común divisor (es decir, el mayor entero positivo que divide a ambos):
a)   Dividir m por n para obtener el resto r (0 <= r < n)
b)   Si r = 0, el MCD es n.
c)   Si no, el máximo común divisor es MCD(n,r).


Espero que me puedan ayudar, Gracias!!



Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: Aeros en 16 Octubre 2010, 21:27
xDDDDDDD muestranos lo que tienes y te ayudaremops :D:D

PD : tarea??


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: [L]ord [R]NA en 16 Octubre 2010, 22:43
Aqui no se hacen tareas... dejen de pedir eso.


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: pavelinhos en 26 Noviembre 2010, 21:35
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);
}
}
Aqui un aporte mio:
Código:
public String Invertir(int num){
            if (num < 10)
                return String.valueOf(num);
            else
                return String.valueOf(num%10) + Invertir(num/10);
        }


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: criptofan en 4 Diciembre 2010, 20:11
Aqui un aporte mio:
Código:
public String Invertir(int num){
            if (num < 10)
                return String.valueOf(num);
            else
                return String.valueOf(num%10) + Invertir(num/10);
        }

Aunque ojo que ahí se esta retornado un String y no un int como es pedido, claramente esto simplifica extremadamente el código por que la suma de cadenas de caracteres simplemente se concatenan a diferencia de la suma de números donde se deben elevar los dígitos a la potencia respectiva para lograr invertir el número. De todas maneras, me gusto mucho tu implementación :)
Agrego otra implementación:

   public static int invertir(int n)
   {
      if(n/10==0)
         return n;
      else
      {
         String s=String.valueOf(n);
         int aux=n;
         int contador=s.length();
         while(aux%10!=0)
         {
         contador--;
         break;
         }
         return (int) ((n%10)*Math.pow(10, contador)+invertir(n/10));
      }
   }


Saludos


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: pavelinhos en 14 Diciembre 2010, 23:06
Aunque ojo que ahí se esta retornado un String y no un int como es pedido, claramente esto simplifica extremadamente el código por que la suma de cadenas de caracteres simplemente se concatenan a diferencia de la suma de números donde se deben elevar los dígitos a la potencia respectiva para lograr invertir el número. De todas maneras, me gusto mucho tu implementación :)

Saludos
Otra manera seria, convertir el String en un int luego de invertir:
Código
  1. public int Invertir(int num){
  2.          String r;
  3.            if (num < 10)
  4.                r= String.valueOf(num);
  5.            else
  6.                r= String.valueOf(num%10) + Invertir(num/10);
  7.          return Integer.parseInt(r);
  8.        }
  9.  


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: hecter en 10 Febrero 2011, 20:20
Esta funcion utilizando la misma logica de recursividad de la idea original funciona
FUNCTION invertir(n INTEGER) RETURN INTEGER deterministic AS
    vnumDig      integer;
    vnuParEntera pls_integer;
  BEGIN
    vnuParEntera := trunc(n, 0);
    vnumDig      := fnugetNumOfDig(vnuParEntera);--esta es una funcion que me obtiene el numero de digito
    if vnumDig = 1 then
      return vnuParEntera;
    end if;
    return(vnuParEntera mod 10) * Power(10, vnumDig - 1) + invertir(vnuParEntera / 10);
  END invertir;


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: hecter en 10 Febrero 2011, 20:21
  FUNCTION invertir(n INTEGER) RETURN INTEGER deterministic AS
    vnumDig      integer;
    vnuParEntera pls_integer;
  BEGIN
    vnuParEntera := trunc(n, 0);
    vnumDig      := fnugetNumOfDig(vnuParEntera);--esta es una funcion que me obtiene el numero de digito
    if vnumDig = 1 then
      return vnuParEntera;
    end if;
    return(vnuParEntera mod 10) * Power(10, vnumDig - 1) + invertir(vnuParEntera / 10);
  END invertir;


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: steven17 en 23 Febrero 2011, 19:52
Como haria yo para implementar una función de recursividad para copiar arreglos hasta llenar la memoria.

Es que ocupo crear un programa que cree un arreglo que se llene con mil numeros enteros y despues que haga copias de ese arreglo hasta caer en fallos de memoria


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: .rn3w. en 22 Marzo 2011, 23:54
aki les mando el metodo invertir en forma recursiva
public int invertir(int n){
    int res=0;
    if(n<10){
        res=n;
    }
    else{
    res=(n % 10)*(int)Math.pow(10, cantDigitos(n)-1) + invertir(n / 10);
    }
    return res;
    }


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: .rn3w. en 23 Marzo 2011, 00:04
estuve revisando los metodos realizados en esta pagina y
en la mayoria de los metodos vi un error que no es tan error

este es mi consejo y tomenlo del lado positivo vale

   utilizan mucho el return y lo aconsejable es que solo se invoke el return
                     solo una 1 ves

 bye y viva la ufc


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: .rn3w. en 25 Marzo 2011, 21:50
hola a todos bueno
aki les dejo un programita que les sirva de mucho lo interesante de este metodo es
que hace 3 veces la llamada recursiva
1
21
321
4321
54321
654321
asi sucecivamente
 public int triangulo(int n){
        int res=0;
        if(n==1){
            res=1;
        }
        else{
            res=(int)Math.pow(10,cantDigitos(triangulo(n-1) ))*n+triangulo(n-1);
        }
        return res;
    }


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: AleX Inc. en 20 Abril 2011, 07:51
Me dejaron de tarea el ejercicio 13, que coincidencia :P
Aqui lo dejo por si les sirve de algo ver otra manera de resolver el cuadro latino, yo use menos parametros.
PD: Adjunto la api para que lo prueben.
Código:
public void cLatino(int[][]mt, int fila, int col)
{
if ( (fila+col+1)==mt.length )
mt[fila][col] = 1;
else if ( (fila+col)>=mt.length )
mt[fila][col] = (fila+col+2)-mt.length;

if ( col<mt.length-1 ) col++;
else if ( fila<mt.length-1 ) { fila++; col=0; }
else return;

cLatino(mt,fila,col);
}

public void Latino(int[][]Mt)
{ cLatino(Mt,0,0); }
Api:
http://upwap.ru/1455317 (http://upwap.ru/1455317)


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: alfred_223315 en 5 Mayo 2011, 04:30
Hola haber si alguien me puede ayudar nesesito este algoritmo (multiplicacion de matrices) en forma recursiva...

void ingreso(int m[][30],int f,int c){
for(int i=0;i<f;i++){
    for(int j=0;j<c;j++){
     cout<<"Valor ["<<(i+1)<<"]["<<(j+1)<<"]= ";
     cin>>m[j];   
    }
}
}

void mostrar(int m[][30],int f, int c){
for(int i=0;i<f;i++){
    for(int j=0;j<c;j++){
     cout<<"Valor ["<<(i+1)<<"]["<<(j+1)<<"]= ";
     cout<<m[j]<<endl;   
    }
}
}

void multiplica(int m1[][30],int m2[][30],int p[][30],int f1,int c1,int f2,int c2){
for(int i=0;i<f1;i++){
    for(int j=0;j<c2;j++){
        for(int k=0;k<c1;k++){
        p[j]=p[j]+(m1[k])*(m2[k][j]);               
        }           
    }
}
cout<<"\n\n\t\tEL PRODUCTO DE VECTORES ES\n\n";
mostrar(p,f1,c2);
}

void inicializaValoresEnCero(int p[][30],int f,int c){
for(int i=0;i<f;i++){
    for(int j=0;j<c;j++){
    p[j]=0;
    }
}
}

int main(){
int M1[30][30],M2[30][30],P[30][30],f1,c1,f2,c2;
cout<<"\n\tPrimera Matriz"<<endl;
do{
cout<<"Ingrese el numero de filas ";
cin>>f1;
}while(f1<1||f1>30);
do{
cout<<"Ingrese el numero de columnas ";
cin>>c1;
}while(c1<1||c1>30);

ingreso(M1,f1,c1);

cout<<"\n\tSegunda Matriz"<<endl;
do{
cout<<"Ingrese el numero de filas ";
cin>>f2;
}while(f2<1||f2>30);
do{
cout<<"Ingrese el numero de columnas ";
cin>>c2;
}while(c2<1||c2>30);
ingreso(M2,f2,c2);

if(c1==f2){

cout<<"Se puede multiplicar"<<endl;
inicializaValoresEnCero(P,f1,c2);
multiplica(M1,M2,P,f1,c1,f2,c2);
}
else
cout<<"NO Se puede multiplicar"<<endl;
system("pause");
return 0;
}



Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: Berrinche en 9 Mayo 2011, 02:39
Me gustaría saber como hacer un método recursivo que reciba un número entero binario y devuelva el número entero
decimal equivalente. Y también como hacer un método recursivo que reciba un número entero decimal y devuelva una cadena con el
número equivalente hexadecimal.

No tengo idea ni de como comenzar.
LBN


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: owfei en 10 Mayo 2011, 08:13
En c++ resolvi el de invertir de ésta manera:

Código
  1. #include <math.h>
  2.  
  3. int inv(int n){
  4. if(n <= 9) return n;
  5. else return inv(n/10) + inv(n%10)*pow(10, n%10-1);
  6. }


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: Mr.Shak en 11 Mayo 2011, 18:02
hola a todos:

Estoy haciendo un curso de java, en el cual tengo que utilizar una función recursiva, o pongo en antecedentes:

Estamos creando un multicine, para comprar entradas y demas. El problema viene a la hora de reservar asientos, los cuales puedes ser consecutivos (si tenemos suerte) o no ( que es mi caso).

La historia es que si un cliente va a comprar 5 entradas al cine, y no tienen 5 entradas correlativas en la fila que quiera dicho cliente, los he de re-ubicar en otra zona del cine y en el peor de los casos en el que no haya por ningun lado 5 asientos consecutivos, pues por ejemplo ponerlos 3 en una fila y 2 en la siguiente justo delante , y sino de la manera en la que puedan estar mas cerca unos de otros.

No voy a decir que me resolvais el codigo, evidentemente, pero la verdad es que no tengo ni p**a idea de como hacerlo. Necesito ayuda de cualquier tipo.

Muchas gracias


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: trueno_dp en 15 Junio 2011, 20:20
Hola, necesito sacar de forma recursiva los divisores de un numero, tengo la iterativa, pero ni en broma consiga la recursiva. graciaas

 public static int recursividad(int numero){
   
     if(numero>2)
     {
       
        return 0;
     }else
     {
   
      
       return recursividad(numero%numero-1);
    }
 
  }


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: TheKaleb32 en 16 Junio 2011, 06:08
/*
Aqui esta una opcion de como se pueden generar con recursividad el ejercicio de invertir un numero.. Se regresa un String, y para solucionar el problema de imprimir ceros innecesarios al inicio o final del String, ocupo un contador y una condición extra..!   
**/

        public static void main(String[] args) {
      System.out.println( invertir ( 1230456 ) );      
   }// cierro metodo main   

         public static String invertir( int a, int b) {

      int c = ++b;

      if( a % 10 == 0 && c - 1 == 0){
         return ( "" + invertir( ( a / 10 ) , c - 1 ));
      }else{
         if ( a == 0 )
            return "";
         else
            return ( ( a % 10 ) + invertir( ( a / 10 ) , c ) );
      }
   }//cierro metodo invertir   


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: primoxhero en 21 Junio 2011, 23:25
por favor ME PUEDEN AYUDAR EN ESTA sumatoria EJERCICIO es la siguiente:
 X^1/1!+X^2/2!+X^N/N!


Título: Ejercicios Recursivos en Java y sus Soluciones-->>Invertir o Numero Recursivos
Publicado por: Skarlo en 1 Diciembre 2011, 03:36
String pal=JOptionPane.showInputDialog("Introduce la palabra");
        JOptionPane.showMessageDialog(null, palabra(pal,pal.length(),"Su invertido es: "));
    }
    static String palabra(String c, int inv, String tama)
    {
       inv=inv-1;
        if(inv>=0)
        {
            tama=tama+c.charAt(inv);
            return palabra(c,inv,tama);   
        }
        else return tama;
    }


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: ato2112 en 4 Diciembre 2011, 23:13
sin while/for/etc.

public int invertir(int n){
      String aux=Integer.toString(n);
      if (n<10)
         return n;
      else return (int) ((n%10)*Math.pow(10, aux.length()-1)+invertir(n/10));
      
   }




Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: jert2004 en 18 Julio 2013, 17:42
¿Quien me puede ayudar sumatoria e^x /x! recursividad java?
favor me podrian ayudar ya que llevo varios dias sin resolver, maso menos tengo este codigo
es la sumatoria de e a la x sobre x factorial
donde e = 2.718186 y x ingresa el usuario

package ejrecursividad;

import java.util.Scanner;

public class SumaFactorialLeperiano {

    static double FACTOR(int valor1) {
        if (valor1 == 0) {
            return 2.718186;
        } else {
            int valor2;
            valor2=valor1;
            return (Math.pow(2.718186,valor1)/(valor2))+(Math.pow(2.718186,FACTOR(valor1 - 1))/(valor2 * FACTOR(valor2 - 1)));
        }
    }

    public static void main(String[] args) {
        double  resultado;
        int valor1;
        System.out.println("ingrese nro1");
        Scanner mrno = new Scanner(System.in);
        valor1 = mrno.nextInt();
        resultado = FACTOR(valor1);
        System.out.println("LA SUMATORIA DEL: " + valor1 + " ES: " + resultado);


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: vhsreturns 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;
   }


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: kakimanu 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.


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: Bundor en 18 Octubre 2014, 05:44
Chincheta


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: DarK_FirefoX 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.        }


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: optimus88 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…


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: konika_bn 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.


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: chiche92 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..


Título: Re: Ejercicios Recursivos en Java y sus Soluciones
Publicado por: abelvaldez en 20 Febrero 2018, 01:33
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;
            }
        }