Ir ao conteúdo
  • Cadastre-se
Ericsson Berg

Dúvida códifo Fibonacci

Recommended Posts

e aí galera!

Sou novo aqui no site e também estou começando um longo caminho para virar um programador!

E já tenho a minha primeira dúvida, por favor me ajudem!

#include <iostream>

#include <cstdlib>

using namespace std;

int fibonacci (int t);

int main (void){

int termo;

double fibo;

cout <<"Digite o termo de fibonacci que deseja saber: ";

cin >> termo;

cin.ignore ();

if (termo==0){

cout<<"Nao existe termo 0!\n\n";

main();

}

cout <<"\nAguarde! Processando...\n\n";

fibo=fibonacci (termo-1);

cout <<"O "<<termo<<"o. termo da sequencia de Fibonacci e "<<fibo<<"\n\n";

system ("pause");

return EXIT_SUCCESS;

}

int fibonacci (int t){

if (t==0 || t==1)

return 1;

else

return fibonacci (t-1)+fibonacci (t-2);

}

COMO ESTE CODIGO FUNCIONA??? já tentei entendê-lo de várias formas e não consegui de jeito nenhum!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio que a tua maior dificuldade seja a função recursiva, veja bem como é trivial

A função recebe um valor(t) por parâmetro.

1º Caso esse valor(t) seja 0 ou 1 ela retornara 1 pois a seqüência de fibonacci è da seguinte forma:

Termo da seqüência: 1º 2º 3º 4º 5º 6º ...

Número de Fibonacci: 1 1 2 3 5 8 ...

Perceba que o próximo número da seqüência é sempre a soma dos dois anteriores.

2º Caso quando o valor e deferente de 0 ou 1 o else é acionado.

Ex: t = 3;

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

return fibonacci(3-1)+fibonacci (3-2);

1 - Parte fibonacci(3-1)

return fibonacci(2-1)+fibonacci(2-2);

1 + 1

2 - Parte fibonacci(3-2)

1

Lebrando que as partes 1 e 2 estão sendo somadas então 1+1+1 = 3

Dica: Controle a entrada de termos negativo em teu código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ex: t = 8;

1 a 6 Fibonacci do lado Esquerdo

6.1 a 2.1 Fibonacci do lado Direito

return fibonacci(8-1)+fibonacci (8-2);

1 - fibonacci(7)

return fibonacci(7-1)+fibonacci(7-2);

2 - fibonacci(7-1)

return fibonacci(6-1)+fibonacci(6-2);

3 - fibonacci(6-1)

return fibonacci(5-1)+fibonacci(5-2);

4 - fibonacci(5-1)

return fibonacci(4-1)+fibonacci(4-2);

5 - fibonacci(4-1)

return fibonacci(3-1)+fibonacci(3-2);

6 - fibonacci(3-1)

return fibonacci(2-1)+fibonacci(2-2); = 1+1

6.1 - fibonacci(3-2)

return 1

5.1 - fibonacci(4-2)

return fibonacci(2-1)+fibonacci(2-2) = 1+1

4.1 - fibonacci(5-2)

return fibonacci(3-1)+fibonacci(3-2); = 3

3.1 - fibonacci(6-2)

return fibonacci(4-1)+fibonacci(4-2); = 3+2

2.1 - fibonacci(7-2)

return fibonacci(5-1)+fibonacci(5-2); = 5+3

Lebrando que os Lados 1 e 2 estão sendo somadas então 1+1+1 + 1+1 + 3 + 3+2 +5+3 = 21

Compartilhar este post


Link para o post
Compartilhar em outros sites

O método de Holocausto, foi bastante inteligente, mas existem n maneiras de se fazer isso a mas comum, e a ultilização de função recursiva, o metodo de cálculo similar a uma busca binária, é bem eficaz e diminui as linhas de código.

o problema é so na inicialização onde os 2 primeiros são 1 .

1 , 1 , 2 , 3 , 5 , 8...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×