Fibonacci - Porque desse jeito não funciona?  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
Giovanni Biffi
HelloWorld

Membro desde: 07/03/2010 16:23:00
Mensagens: 10
Offline

Olá pessoal... sei que já existe muita informação neste fórum sobre Fibonacci, já achei o código que funciona corretamente, entretanto gostaria de saber porque o código abaixo NÃO funciona adequadamente.



o código imprime >>> 0 1 1 3 5 7 9 11 13 15
o que está errado...

O código abaixo trabalha perfeitamente e imprime >>> 0 1 1 2 3 5 8 13 21 34



Sei que estou comentendo um erro de lógica de programação mas eu não consigo ver
o problema do primeiro código! to cego! Me ajudem!
Obrigado!

Giovanni Biffi
andeb
Thread.start()

Membro desde: 17/05/2009 21:01:04
Mensagens: 47
Localização: Blumenau
Offline

Não funcionou porque acho que você não entendeu o conceito de Fibonacci. A sequência de Fibonacci é composta pelo resultado anterior + o resultado anteanterior (inventei essa palavra agora...), ali você só tá fazendo - 1 e - 2. :p
Daria certo se você armazenasse isso em um array...

Fiz isso aqui sem usa recursão, vê se ajuda hehe


"it's not what you know, it's when you know it"
Tobarinha
HelloWorld

Membro desde: 13/05/2008 18:42:55
Mensagens: 10
Offline

Olá, meu primeiro post aqui no GUJ, sou iniciante em JAva tambem, mas tentarei ajudar.

É o seguinte: a grande diferença entre o seu código e o que funciona é que :

Um funciona e outro não rssss...

Brincadeiras a parte, o código que funciona é recursivo entao, vou postr o código que funciona apenas pra poder explicar melhor:



Quando ele chama o método calcular(x) com x = 3 por exemplo, a função calcular em seu retorno chama ela mesma (recursividade - leia sobre pilhas tambem)
O que acontece é o seguinte a primeira chamada pra
calcular (3) realiza duas chamadas no return
calcular(2) + Calcular(1)

Calcular(2) retorna duas chamadas no return
Calcular(1) + Calcular(0)

NEsse ponto a pilha se encerra pois não existem mais chamadas a métodos... então ela é resolvida do fim para o começo.
Agora vamos avaliar:
Calcular(0) = 0
Calcular(1) = 1
Calcular(2) = Calcular(0) + Calcular(1) = 1
CAlcular(3) = calcular(2) + Calcular(1) = 2
CAlcular(4) = calcular(3) + Calcular(2) = 3 ....

E assim até o infinito ...

NO saso do seu programa voce não usou pilha, voce fez um incremento simples e quase reproduziu uma P.A rs

Espero ter ajudado, qualquer coisa posta mais ai que agente se ajuda!!!

Valew e boa sorte!!!







Giovanni Biffi
HelloWorld

Membro desde: 07/03/2010 16:23:00
Mensagens: 10
Offline

Tobarinha wrote:Olá, meu primeiro post aqui no GUJ, sou iniciante em JAva tambem, mas tentarei ajudar.

É o seguinte: a grande diferença entre o seu código e o que funciona é que :

Um funciona e outro não rssss...

Brincadeiras a parte, o código que funciona é recursivo entao, vou postr o código que funciona apenas pra poder explicar melhor:



Quando ele chama o método calcular(x) com x = 3 por exemplo, a função calcular em seu retorno chama ela mesma (recursividade - leia sobre pilhas tambem)
O que acontece é o seguinte a primeira chamada pra
calcular (3) realiza duas chamadas no return
calcular(2) + Calcular(1)

Calcular(2) retorna duas chamadas no return
Calcular(1) + Calcular(0)

NEsse ponto a pilha se encerra pois não existem mais chamadas a métodos... então ela é resolvida do fim para o começo.
Agora vamos avaliar:
Calcular(0) = 0
Calcular(1) = 1
Calcular(2) = Calcular(0) + Calcular(1) = 1
CAlcular(3) = calcular(2) + Calcular(1) = 2
CAlcular(4) = calcular(3) + Calcular(2) = 3 ....

E assim até o infinito ...

NO saso do seu programa voce não usou pilha, voce fez um incremento simples e quase reproduziu uma P.A rs

Espero ter ajudado, qualquer coisa posta mais ai que agente se ajuda!!!

Valew e boa sorte!!!









O que é P.A. ??

Giovanni Biffi
ellison'
Debugger
[Avatar]

Membro desde: 06/06/2008 11:21:28
Mensagens: 53
Localização: Rio de Janeiro
Offline

Opa meu camarada.
Devido a sua dúvida com o fibonacci eu implemente esse algoritmo aqui sem utilizar recursividade. Fica mais fácil entender como funciona:



Espero ter ajudado. Abraço.

Giovanni Biffi wrote: O que é P.A. ??

Progressão Aritmética = )
Você define uma sequencia (Ex.: 1, 2, 3, 4, 5) P.A de Razão 1. Ou seja, você define um intervalo e vai incrementando ele.
Se fosse uma P.A de razão 3 o Exemplo seria: 1, 4, 7, 10, 13 ... etc

Ellison Alves de Souza
[Email] [MSN]
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team