Problema com recursão java.lang.StackOverflowError

4 respostas
R

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á
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);
			
	}
	
	
	}

4 Respostas

S

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.

R

como eu poderia sanar isto?

T

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.

R

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

Criado 11 de março de 2009
Ultima resposta 11 de mar. de 2009
Respostas 4
Participantes 3