Duvida com método recursivo

Bom eu estou começando a aprender java e ate agora tava tudo beleza mais me deparei com o seguinte exercicio:

1)Um método pode chamar ele mesmo. Chamamos isso de recursão.
Você pode resolver a série de fibonacci usando um método que chama ele mesmo.
O objetivo é você criar uma classe, que possa ser usada da
seguinte maneira:

Fibonacci fibo = new Fibonacci(); int i = fibo.calculaFibonacci(6); System.out.println(i);

Aqui imprimirá 8, já que este é o sexto número da série.
Este método calculaFibonacci não pode ter nenhum laço, só pode chamar ele mesmo como método. Pense
nele como uma função, que usa a própria função para calcular o resultado.

Depois eu tentei fazer esse tal de método recursivo mais nao dava certo entao procurei uma solução na net
e encontrei o seguinte codigo:

class Fibonacci { int calculaFibonacci( int n ){ if (n <= 2){ return 1; } return calculaFibonacci (n-1) + calculaFibonacci (n-2); } }

Ele Funcionou corretamente mas eu nao entendi algumas coisas:

1)Poruqe se eu retirar o

if (n <= 2){ return 1; }
do codigo ele nao funciona?
da o seguinte erro (repetindo varias vezes no pronpt

at Fibonacci.calculaFibonacci(Fibonacci.java:4) at Fibonacci.calculaFibonacci(Fibonacci.java:4)

2)O Modo como ele calcula o fibonacci eu nao entendi eu achei mais pratico usar este mostrado acima do que usar o que eu fiz
em um exercicio anterior Abaixo:

class Fibonacci { public static void main(String[] args) { for(long a = 0, b = 1; a <= 144;) { System.out.print(a + ", " + b + ", "); a += b; b += a; } } }

3)No Codigo Abaixo:

class Fibonacci { int calculaFibonacci( int n ){ if (n <= 2){ return 1; } return calculaFibonacci (n-1) + calculaFibonacci (n-2); } }

Nao era pra entrar em um loop infinito?
pois nao vejo o trecho que diz para parar

Bom acho que é isso agradeço desde ja

Se juntares as tuas dúvidas 1) e a 3), tu mesmo és capaz de descobrir a resposta…

Cara, tenta dar uma analisada pelo que o cara postou aqui em cima. Se mesmo assim não entender avisa aí q eu explico (apesar de ser novo, tiraram uma dúvida similar minha mes passado tambem nesse forum). Abraço

cara esse ai ta muito dificil de entender

pega esse:

class Fibonacci { int cF(int n){ return(n>1)?cF(n-1)+n:n; } }

esse método ai que passei funciona assim:

quando o método recursivo chama ele mesmo, ele aloca esse método na pilha.

vamos dizer que passamos o n = 5 para o método calculaFibonacci…:

calculaFibonacci(5)+calculaFibonacci(5-1)+calculaFibonacci(4-1)+calculaFibonacci(3-1)+calculaFibonacci(2-1)

la no ultimo método da pilha (n < 1), ele retorna 1 e ai vai voltando, da direita para a esquerda:

5 + 4 + 3 + 2 + 1

Opa vlw acho que entendi a duvida 1 e 3 seria mais ou menos isso?
quando ele passa por
return 1;
para de repetir pois retorna 1 e sai do metodo antes de ele ser repetido

[quote=douglaskd]esse método ai que passei funciona assim:

quando o método recursivo chama ele mesmo, ele aloca esse método na pilha.

vamos dizer que passamos o n = 5 para o método calculaFibonacci…:

calculaFibonacci(5)+calculaFibonacci(5-1)+calculaFibonacci(4-1)+calculaFibonacci(3-1)+calculaFibonacci(2-1)

la no ultimo método da pilha (n < 1), ele retorna 1 e ai vai voltando, da direita para a esquerda:

5 + 4 + 3 + 2 + 1[/quote]

Bom eu ate entendi como o metodo é alocado mais quando rodei seu codigo deu 21 e o correto seria 8
Obs:Eu passei 6 como parametro

[quote=lipetom]Opa vlw acho que entendi a duvida 1 e 3 seria mais ou menos isso?
quando ele passa por
return 1;
para de repetir pois retorna 1 e sai do metodo antes de ele ser repetido

[quote=douglaskd]esse método ai que passei funciona assim:

quando o método recursivo chama ele mesmo, ele aloca esse método na pilha.

vamos dizer que passamos o n = 5 para o método calculaFibonacci…:

calculaFibonacci(5)+calculaFibonacci(5-1)+calculaFibonacci(4-1)+calculaFibonacci(3-1)+calculaFibonacci(2-1)

la no ultimo método da pilha (n < 1), ele retorna 1 e ai vai voltando, da direita para a esquerda:

5 + 4 + 3 + 2 + 1[/quote]

Bom eu ate entendi como o metodo é alocado mais quando rodei seu codigo deu 21 e o correto seria 8
Obs:Eu passei 6 como parametro[/quote]

o fibonacci soma todos os numeros anteriores,

sendo 6, a conta seria: 6 + 5 + 4 + 3 + 2 + 1 = 21

da onde veio esse 8 ?

[quote]
o fibonacci soma todos os numeros anteriores,

sendo 6, a conta seria: 6 + 5 + 4 + 3 + 2 + 1 = 21

da onde veio esse 8 ?[/quote]

na verdade o fibonacci soma os dois anteriores para dar o terceiro numero e ele inicia com 1,1 exemplo:

1,1,2,3,5,8…
(1+1 = 2
2+1 = 3
3+2 = 5
5+3 = 8…)

passando 6 como parametro eu estou pedindo que o metodo retorne o sexto membro da serie fibonacci que é 8.

putz cara você tem toda a razão…

tava me confundindo

De boa isso confunde mesmo…

Vlw pessoal minha duvida ja foi resolvida obrigado a todos que responderam
abraços