Foro sobre Java SE > Ayuda con programa de Recursividad
Hola, te doy una primera pista de por donde van los tiros:
aqui:
int i=num.length()-1;
y es el caracter por el que vas a comprobar, siempre estas pasandole el ultimo caracter y se queda como una recursividad infitinita y por eso el stack overflow, Y deberia tomar el valor del segundo parametro(j), que no lo estas usando para nada, y quedar asi:
int i=j-1;
Seria como tu lo tienes, si fueras eliminando un caracter de la cadena en hexadecimal, de esa manera si serviría como lo tenias. Bueno resumiendo, para evitar el stackOverflow,
quedaria:
public long hexa(String n, int j) {
long suma = 0;
StringBuilder num = new StringBuilder(n).reverse();
int i = j-1;
if (i <= 0) {
return 1;
} else {
if (num.charAt(i) == 'A') {
suma += 10 * (Math.pow(16, i));
} else if (num.charAt(i) == 'B') {
suma += 11 * (Math.pow(16, i));
} else if (num.charAt(i) == 'C') {
suma += 12 * (Math.pow(16, i));
} else if (num.charAt(i) == 'D') {
suma += 13 * (Math.pow(16, i));
} else if (num.charAt(i) == 'E') {
suma += 14 * (Math.pow(16, i));
} else if (num.charAt(i) == 'F') {
suma += 15 * (Math.pow(16, i));
} else {
suma = suma + Integer.parseInt("" + num.charAt(i)) * (long) Math.pow(16, i);
}
return suma + hexa(n, i - 1);
}
}
Así evitas la rellamada a la función así misma de forma infinita. Ahora, he probado a convertir un código hexadecimal y la solución no ha sido correcta. Eso te lo dejo para que tu veas que pasa.
Un saludo
Muchas gracias si ha servido!, ahora la cuestion es que el resultado sale menor a lo esperado por ejemplo A7=167 y el programa arroja 161.
hola de nuevo, piensa en cuando i==0, ¿Realmente debe devolver 1, o en realidad debería devolver 0..9 o 10 en caso de A, 11 en caso de B, 12 en caso de C,...?
Porque..¿Que diferencia hay entre 161 y 167?
Un saludo
Hola amigo que tal, eh estado intentando hacer un programa recursivo que convierta un numero hexadecimal a decimal y me sale un error de StackOverFlow, necesito su ayuda!, les dejo aqui el codigo,de mi metodo hexa:
public long hexa(String n,int j){
long suma=0;
StringBuilder num=new StringBuilder(n).reverse();
int i=num.length()-1;
if(i<=0){return 1;}else{
if(num.charAt(i)=='A'){
suma+=10*(Math.pow(16, i));
}else if(num.charAt(i)=='B'){
suma+=11*(Math.pow(16, i));
}else if(num.charAt(i)=='C'){
suma+=12*(Math.pow(16, i));
}else if(num.charAt(i)=='D'){
suma+=13*(Math.pow(16, i));
}else if(num.charAt(i)=='E'){
suma+=14*(Math.pow(16, i));
}else if(num.charAt(i)=='F'){
suma+=15*(Math.pow(16, i));
}else{
suma = suma + Integer.parseInt(""+num.charAt(i))* (long)Math.pow(16,i);
}
return suma + hexa(n,i-1);}
}