Problema com recursão java.lang.StackOverflowError

Galera estou tendo estouro de OverFlow nesta recursão, não quis usar um laço pois o laço é mais lento.

o que esse código faz é testar se o numero xxxxy é igual ao yxxxx*8/3

como eu não soube fazer este teste sem utilizar string acho que ficou mto pesado por isso estou tentando diminuir o máximo possivel o tempo dele.

agradeço a ajuda desde já

[code]import javax.swing.JOptionPane;

public class trab12{

long numero=0, inverso=0;

public trab12(){

	recursao(12);
	System.out.println(numero);
}

public void recursao(int i){
	String numer,revNumer;
	
	numer=numero+"";
	
	revNumer=numer.substring(numer.length()-1, numer.length())+numer.substring(0,numer.length()-1);

	try{
		
		inverso= Long.parseLong(revNumer);
	}
	catch (Exception e) {
		e.printStackTrace();
	}
	
	inverso=inverso*8/3;
	
	if(numero==inverso)
		{
		i--;
		JOptionPane.showMessageDialog(null,numero+"");
		}
	
	numero+=24;
	recursao(i);
		
}


}[/code]

acho que este Stack Overflow é devido ao fato de você chamar infinitas vezes recursão(i), aí num acaba nunca e estoura a memória.

como eu poderia sanar isto?

Todas pessoas que já escreveram um programa com recursão sabem duas coisas:

  • Toda rotina recursiva deve ter um jeito de retornar quando receber algum valor especial (tipicamente 0, 1 ou 2). Do jeito que você escreveu, ela nunca retorna, porque não existe o tratamento para esse valor especial.

  • Quando uma rotina recursiva chama a si mesma, ela tem sempre de se chamar com outros parâmetros, não com o mesmo parâmetro recebido. Do jeito que você escreveu, o método “recursão(i)” chama “recursão(i)”, sem mexer no parâmetro ou pôr outro valor - e isso com certeza vai dar problemas.

o que acontece é o seguinte estou chamando denovo… para tentar fazer ele repetir até que o i chegue em zero, faltou eu colocar esta aprte adminto, mas ele tranca na terceria vez.

vou sanar este problema e testar… grato pela ajuda