Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > stack overflow error

Hola, estoy iniciandome apenas en la programacion recursiva y necesitaba hacer un programa que me dijiera cuantos divisores tiene un numero x, nose cual sea el error del codigo, se los agradeceria i me ayudan

package Testing;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class Testing{
public static void main(String[]args) throws IOException{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int a = Integer.parseInt(reader.readLine());
int x = Divisores(a, a/2);
System.out.println(x);
}

static int Divisores(int x, int div){
if(div==1)
return 1;
else if(x % div == 0)
return 1 + Divisores(x,div--);
else
return Divisores(x,div--);

}
}

marzo 22, 2015 | Registered Commenterjtapiase

La excepción Stackoverflow se produce porque el método divisores (los métodos en Java deben comenzar con una letra minúscula) no finaliza nunca.

marzo 22, 2015 | Registered Commenterchoces

por que? no se supone que con el condicional de (div==1) return 1; termina? (ya que div siempre decrece en uno, llegara a valer uno y ahi termina la funcion) no?

marzo 22, 2015 | Registered Commenterjtapiase

Sin depurar el programa para confirmarlo, te diría que estás usando postincremento (div--) y puede que, como resultado, estés llamando al método siempre con el mismo valor de div.

Prueba a usar predecremento (--div) y a ver si eso te funciona.

marzo 22, 2015 | Registered Commenterrickiees

Eso es exactamente lo que sucede. Usando div - 1 en vez de div-- funciona sin problemas.

marzo 22, 2015 | Registered Commenterchoces

Muchisimas gracias!!

marzo 22, 2015 | Registered Commenterjtapiase