Ir ao conteúdo
  • Cadastre-se

Estou aqui novamente com mais uma Dúvida agora é com a função Fibonacci.


jbhorizontece

Posts recomendados

Galera alguém poderia me ajudar a entender como esse código de Fibonacci funciona de como ele faz os cálculos. Isso que é um pouco difícil não sei como ele calcula até dar o retorno sem usar nenhum laço, gostaria de uma força aí pessoal. :)

 

segui o  código aí galera.

 

há paciência aí comigo que estou aprendendo agora c e c++ :) um abraço para todos.

#include<iostream>#include<cstdio>using namespace std;//FIBONACCI FEITO ATREVÉS DE RECURSIVASunsigned long fibonacci(unsigned long);int main(){unsigned long numero, resultado;            cout<<"Digite um Inteiro: ";    cin>>numero;            resultado=fibonacci(numero);    cout<<"Fibonacci ("<<numero<<") = "<<resultado<<endl;    system("pause");    return 0;}    unsigned long fibonacci(unsigned long n)    {                            if(n==0 || n==1)                return n;                    else            return fibonacci(n-1) + fibonacci(n-2);}
Link para o comentário
Compartilhar em outros sites

voce tem que entender primeiro como funciona recursão,se nao nao vai entender nada que envolva recursão..

tentei exemplificar nessa função

 

Primeiro fiz sem recursão ,depois a com recursão

void FFibo2(int n){    int x2 = 1;    int x1 = 0;    while(n > 0)    {        x1 = x1 + x2;//1º rodada = 1; 2º rodada = 3; 3º rodada = 8(de 3 + 5);        x2 = x2 + x1;//1º rodada = 2; 2º rodada = 5; 3º rodada = 13(de 5 + 8);    }}void FFiboR(int n,int ant,int res){    if(n == 0)//Se n for 0 sai da recursão        return;        std::cout<<res <<" "<< ant << " ";    FFiboR(n -1,ant += res,res += ant);//"n - 1" é o que vai simplificando a recursão até que ela satisfaça a condição acima                                                           //ant += res é a soma do segundo numero(que é 1 agora) + o 1º (como o algoritmo diz para fazer)                                                           //res +=ant é o primeiro numero(agora é 0 agora) + o segundo numero ("ant",que é 1 agora)}void FFibo3(int n){    FFiboR(n - 1,1,0);}int main(){    FFibo3(6);        system("pause");    return 0;}
Link para o comentário
Compartilhar em outros sites

voce tem que entender primeiro como funciona recursão,se nao nao vai entender nada que envolva recursão..

tentei exemplificar nessa função

 

Primeiro fiz sem recursão ,depois a com recursão

 

void FFibo2(int n)

{

    int x2 = 1;

    int x1 = 0;

    while(n > 0)

    {

        x1 = x1 + x2;//1º rodada = 1; 2º rodada = 3; 3º rodada = 8(de 3 + 5);

        x2 = x2 + x1;//1º rodada = 2; 2º rodada = 5; 3º rodada = 13(de 5 + 8);

    }

}

 

 

 

void FFiboR(int n,int ant,int res)

{

    if(n == 0)//Se n for 0 sai da recursão

        return;

    

    std::cout<<res <<" "<< ant << " ";

    FFiboR(n -1,ant += res,res += ant);//"n - 1" é o que vai simplificando a recursão até que ela satisfaça a condição acima

                                                           //ant += res é a soma do segundo numero(que é 1 agora) + o 1º (como o algoritmo diz para fazer)

                                                           //res +=ant é o primeiro numero(agora é 0 agora) + o segundo numero ("ant",que é 1 agora)

}

void FFibo3(int n)

{

    FFiboR(n - 1,1,0);

}

 

 

int main()

{

    FFibo3(6);

    

    system("pause");

    return 0;

}

Atlos a função FFiboR só vai retornar o seu valor quando ela encontrar todos os números 1 para fazer a soma deles e fazer retorno do resultado da soma desses números, para gerar o numero FFiboR?

Link para o comentário
Compartilhar em outros sites

para o parametro "n" voce passa um numero(esse vai ser o numero de quantas vezes vai recursionar,ou seja,da quantidade de sequencias Fibonacci que vai ser mostrada)

 

Aqui  "FFiboR(n -1,ant += res,res += ant)" , ela vai chamar ela mesma de novo somando ant = ant(1)  + res(0),no parametro "ant" e res = res(0) + ant(1),no parametro "res",na próxima vez que ela for chamar ela de novo ja será ant = ant(1) + res(1) e res = res(1) + ant(1)

 

Existem bons livros de algoritmos,http://www.amazon.com/s/ref=nb_sb_noss_1?url=search-alias%3Dstripbooks&field-keywords=C%2B%2B%20Algorithms

Link para o comentário
Compartilhar em outros sites

por exemplo: Se eu entrei  com o numero 3 então ela vai passar para a função fib esse numero e nela vai fazer o calculo até encontrar os valores que são 1 para somar esses valores diminuídos de f(3) e assim encontrando o numero 2 que é o numero do fibonacci  de f(3) = 2 e retornar esse numero 2 para 'main'  assim mostrando na tela o valor 2 que é fibonacci 2. Achei a recursividade parecida com um loop porque vi que dessa forma recursiva também é como se tivesse usando um loop legal, isso, se eu tiver errado me corrija por favor . :)

 estou amando aprender programar em c/ c++. srrsrsrsrsrsrs

Acho que estou indo bem.


No meu caso estou quero dizer que ele faz isso:

 

       //return (fibonacci(n-1) + fibonacci(n-2)) ele entra com três  na função.

e então faz o calculo que está embaixo.                 

              por exemplo:       //f(3)= f(2)+f(1)   no f(3) ele leva o numero 3 para a função fibonacci e faz o calculo onde é encontrado "fibonacci (f(2)+f(1))" e depois feito isso ele encontrou 1 e guardou para realizar a soma mais tarde. e então ele pega o f(2) como não é 1 e chama ele para fazer o calculo novamente.
                                         //f(2)=f(1)+f(0)   agora f(2) ele leva o numero 2 para a função e faz o calculo onde é encontrado "fibonacci (f(1)+f(0))" como quebramos a função em parti ele encontrou os numero que estão embaixo para a soma e acha o valor do fibonacci que é 2. :)
                                          //f(1)+f(1)=2

eu entendi assim :) se eu estiver errado por favor me corrija pls.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...