Duvida Classe

7 respostas
V

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 ira 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.

Só não entendi como o metodo chama ele mesmo, poderia explicar essa parte e como seria esse codigo ? agradeço desde já.

7 Respostas

Eric_Yuzo

Segue um exemplo de método recursivo para cálculo de fatorial:

int calcularFatorial(int n) { if (n == 0) { return 1; } return n * calcularFatorial(n - 1); //Estou chamando o método calcularFatorial() novamente. }
Vamos supor que eu passe 3 como parâmetro:

int fatorial = calcularFatorial(3); //Calcula 3!

Aqui vai uma simulação de o que ocorre com o método:

int calcularFatorial(int n) { // n = 3 if (n == 0) { // 3 não é == a zero. return 1; } //Então vem pra cá. return n * calcularFatorial(n - 1); //Aqui é o mesmo que -> return 3 * calcularFatorial(3 - 1); }
Resumindo, o método calcularFatorial vai ser chamado até que o n seja igual a zero.

No fim das contas vai ser como se tivesse feito: (3 * (2 * (1 * (1)))) -> imagine que cada parênteses é uma chamada do método calcularFatorial().

Aí teria que desenvolver uma lógica para aplicar a sequência de Fibonacci.

Se a explicação estiver muito confusa avisa aí.

Falou…

V

entendi, agora nesse questão do fatorial faltou um loop :stuck_out_tongue:

rdsilio

Bom dia,

Não faltou loop, o fato de o método ser executado recursivamente funciona como um loop neste caso.

V

aaah entendi, que burrice a minha HAUHAHUA.

V

Analisando direito, não entendi não.

poderiam me explicar essa parte:

return n * calcularFatorial(n - 1); //Aqui é o mesmo que -> return 3 * calcularFatorial(3 - 1);
rdsilio

Valeio Bezerra:
Analisando direito, não entendi não.

poderiam me explicar essa parte:

return n * calcularFatorial(n - 1); //Aqui é o mesmo que -> return 3 * calcularFatorial(3 - 1);

Ao executar o método passando o valor 4 por exemplo calcularFatorial(4) a cada chamada recursiva, o método será armazenado numa pilha de processamento aguardando um retorno sendo assim:

1 calcularFatorial(4);

como n nao é igual a 0 ocorre uma nova chamada com  n * calcularFatorial(n - 1)

2   n * calcularFatorial(3);

como n nao é igual a 0 ocorre uma nova chamada com  n * calcularFatorial(n - 1)

3     n * calcularFatorial(2);

como n nao é igual a 0 ocorre uma nova chamada com  n * calcularFatorial(n - 1)

4       n * calcularFatorial(1);

como n nao é igual a 0 ocorre uma nova chamada com  n * calcularFatorial(n - 1)

5         n * calcularFatorial(0);

Dessa vez n é igual a 0, então será retornado o valor 1 para a chamada anterior (5) e está retorná a (4) até chegar a (1)

if (n == 0) { // 3 não é == a zero.

return 1;

}
Eric_Yuzo

Valeio Bezerra:
poderiam me explicar essa parte:

return n * calcularFatorial(n - 1); //Aqui é o mesmo que -> return 3 * calcularFatorial(3 - 1);


Indo por partes:
return indica o retorno do método, que no caso é o conteúdo de “n” multiplicado pelo retorno de calcularFatorial(n - 1);

No exemplo: 3! = 3 * 2 * 1 = 6.

Quando eu chamo calcularFatorial(3):

calcularFatorial(3); //Quando eu passo 3 por parâmetro, estou dizendo que n = 3. // Portanto este método chama calcularFatorial(2), que por sua vez chama calcularFatorial(1), que por sua vez chama calcularFatorial(0). Isto ocorre por causa do return n * calcularFatorial(n - 1). //Quando 0 é passado por parâmetro, a condição do if (n == 0) será verdadeira, portanto retornará 1. Encerrando as chamadas. //A partir daí, este retorno será multiplicado por n e o resultado é retornado para o método anterior e assim por diante.

[EDIT]Valeu rdsilio, num tinha visto, mas ficou até mais claro. hehe

Criado 21 de outubro de 2010
Ultima resposta 21 de out. de 2010
Respostas 7
Participantes 3