[RESOLVIDO] problemas com metodo recursivo!

olá pessoal, sei quenao falta postes com esse assunto no guj… mas eu nao consegui entender nehun.
estou iniciando em java e estou com problemas para entender a logica do metodo recursivo, nao consigo execultar naca com esse metodo, e tem um exercicio na minha apostila que pede para min estudar sobre ele, se alguem tiver algo que me ajude…
agradeço desde já :slight_smile:

Se é a definição que vc quer aí está, em java método é igual função.

Em ciência da computação, a recursividade é a definição de uma subrotina (função ou método) que pode invocar a si mesma.

Poste o código para ver se posso te ajudar melhor.

[quote=FabinhoGil] olá pessoal, sei quenao falta postes com esse assunto no guj… mas eu nao consegui entender nehun.
estou iniciando em java e estou com problemas para entender a logica do metodo recursivo, nao consigo execultar naca com esse metodo, e tem um exercicio na minha apostila que pede para min estudar sobre ele, se alguem tiver algo que me ajude…
agradeço desde já :)[/quote]

FabinhoGil,

Coloca o exercicio ai para que possamos te ajudar, coloque também o que você tentou fazer

minha apostila pede algo como

Fibonacci fibonacci = new Fibonacci();
for (int i = 1; i <= 6; i++) {
int resultado = fibonacci.calculaFibonacci(i);
System.out.println(resultado);
}

e ela diz que vai mostrar ate a sexta posição da sequencia!!!

mas nao intendii por que vai fazer isso…
na vdd nao consegui nen fazer este codigo para que compile corretamente!!!

abs; sei que precisa ter o resto da implementação do fibonacci.

FabinhoGil,

Da forma que você mencionou, não está sendo feita recursivamente, de uma olhada sobre recursividade neste link:

http://www.linhadecodigo.com.br/artigo/3316/recursividade-em-java.aspx

no qual a principal ideia é que o método chame a si proprio na onde o mesmo tem uma condição de parada.

Aqui vai um exemplo de função recursiva para fibonacci:

Caso ainda esteja com dúvida poste o código novamente para que possamos ajudar.

recursividade é a capacidade de uma função chamar-se a si própria. (empilha os métodos e depois desempilha)

int recursao(x){ if (x <= 25) { return recursao(x +1); else{ return x; } }

então eu utilizo esse método assim:

resultado = recursao(20);

exemplo de processamento que o java faz para empilhar (leia de cima para baixo):

int recursao(x=20){ return recursao(20+1){ return recursao(21+1){ return recursao(22+1){ return recursao(23+1){ return recursao(24+1){ //aqui x ficou valendo 25 return x=25; // 25 } } } } } }

quando chegou no 25, ela parou de se chamar, e começou a retornar o x=25, que vai ir voltando de baixo para cima:

resultado = 25; // resultado final (leia de baixo para cima) return x=25 { return x=25 { return x=25 { return x=25 { return x=25 { return x=25 { } } } } } }

tente fazer montar o empilhamento e desempilhamento deste método:

int recursao(x){ if (x <= 10) { return recursao(x) + recursao(x); else{ return x; } }

uso:

resultado = recursao(1) // Qual o resultado ?

outra maneira de entender, vá na sua IDE e coloque um marcador debug na segunda linha da função, peça para debugar step-by-step

“pelo que eu entendi na primeira implementação”
Deve ser algo como:

int recursao(x=1){  
        return recursao(1+1){  
             return recursao(2+2){  
                  return recursao(4+4){  
                       return recursao(8+8){  //aqui x ficou valendo 8
                                  return x=8;  // 8                             
                                 
                         }  
                  }  
           }   
     }  
}  

mas esta com varios bugs ne
um ex e na linha do else que nao fechou a chave do if

}else{

}

e para definir a variavel dentro do metodo precisa de um int e o metodo pode ser void

void recursao(int x){

e aqui na minha implementação eu nao usei o return olha so se esta certo???

me corrija por favor…

public class Recursao{
	void recursao(int x){
	    if (x <= 10) {
	         	recursao(x+x);
	         	System.out.println(x);
	    }
	}
}

class RecTeste{
	public static void main(String[] args){
		Recursao rc = new Recursao();

		rc.recursao(1);
	}
}

muito obrigado as duas respostas me foram muito uteis…
tanto a implementação do douglaskd

como tbm os links do paulohms

vlw mesmo pessoal acho que da pra dizer que sei o que é recursao agora srsrsrrs [RESOLVIDO]

ate+