Dicas para melhorar apostilas FJ-11 da Caelum

[quote=DavidUser]queria que inserissem as resoluções dos desafios da apostila.

exemplo: fiz o desafio do início da apostila pag. 58 nº 1,

[quote]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(5);
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.
2) Por que o modo acima é extremamente mais lento para calcular a série do que o modo iterativo (que se usa
um laço)?
3) Escreva o método recursivo novamente, usando apenas uma linha. Para isso, pesquise sobre o operador
condicional ternário. (ternary operator)[/quote]

bem resolvi sem utilizar laços mas acho q não era assim q era pra resolver:

class FibonaciProgram{//1,1,2,3,5,8,13,21,... int i=2; public static void main(String[]args){ FibonaciProgram fibo=new FibonaciProgram(); fibo.calculaFibonacci(1,1,5); } void calculaFibonacci(int y,int x,int limite){ y=y+x; ++i; if (i==limite)System.out.println(y+x); x=y+x; ++i; if (i==limite)System.out.println(y+x); if(i<limite)calculaFibonacci(y,x,limite); } }[/quote]

Realmente não era pra escrever assim.

Fibonacci de 0 e de 1 são sempre 1.
Fibonacci de n é a soma do fibonacci de n-1 com o fibonacci de n-2.

Pegue essas duas coisas que disse acima e faça uma função. Só lembre que vc tem que retornar um número, e não ficar escrevendo na tela.

nossa ótima lógica nunca tinha observado isso!
tudo se basea no padrão base: 0 e 1 de traz pra frente!

int fibonacciCompleto (int i){
        if(i==0 || i==1){
            return i;
        }else{
            return (fibonacciCompleto(i-1) + fibonacciCompleto(i-2));
        }
    }