Autor
|
Tema: Ejercicios Recursivos en Java y sus Soluciones (Leído 427,507 veces)
|
pavelinhos
Desconectado
Mensajes: 2
|
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); } } Aqui un aporte mio: public String Invertir(int num){ if (num < 10) return String.valueOf(num); else return String.valueOf(num%10) + Invertir(num/10); }
|
|
|
En línea
|
|
|
|
criptofan
Desconectado
Mensajes: 1
|
Aqui un aporte mio: 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
|
|
« Última modificación: 4 Diciembre 2010, 21:36 pm por criptofan »
|
En línea
|
|
|
|
pavelinhos
Desconectado
Mensajes: 2
|
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: public int Invertir(int num){ if (num < 10) else r = String. valueOf(num %10 ) + Invertir (num /10); }
|
|
|
En línea
|
|
|
|
hecter
Desconectado
Mensajes: 2
|
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;
|
|
|
En línea
|
|
|
|
hecter
Desconectado
Mensajes: 2
|
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;
|
|
|
En línea
|
|
|
|
steven17
Desconectado
Mensajes: 1
|
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
|
|
|
En línea
|
|
|
|
bengy
Desconectado
Mensajes: 501
mis virtudes y defectos son inseparables
|
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; }
|
|
|
En línea
|
|
|
|
bengy
Desconectado
Mensajes: 501
mis virtudes y defectos son inseparables
|
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
|
|
|
En línea
|
|
|
|
bengy
Desconectado
Mensajes: 501
mis virtudes y defectos son inseparables
|
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; }
|
|
|
En línea
|
|
|
|
AleX Inc.
Desconectado
Mensajes: 25
|
Me dejaron de tarea el ejercicio 13, que coincidencia 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. 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
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Soluciones ejercicios C
« 1 2 »
Ejercicios
|
Cobac
|
13
|
51,948
|
7 Agosto 2005, 21:55 pm
por Cobac
|
|
|
soplo pon las soluciones a los ejercicios de VB pliss
Ejercicios
|
Codename!!
|
4
|
7,099
|
18 Julio 2004, 08:31 am
por Codename!!
|
|
|
Ejercicios Java
Ejercicios
|
Lorena88
|
1
|
7,401
|
21 Enero 2009, 01:42 am
por Amerikano|Cls
|
|
|
2 ejercicios de java
Java
|
kay19
|
1
|
9,317
|
28 Agosto 2009, 20:34 pm
por Caballero Maldito
|
|
|
ejercicios + soluciones en java
« 1 2 3 »
Java
|
bengy
|
25
|
24,749
|
14 Septiembre 2011, 19:01 pm
por bengy
|
|