Fibonacci com Laços em C++

Neste tutorial de nosso curso de C++, vamos aprender como exibir os termos da série de Fibonacci, usando apenas laços!

Fibonacci em C++ com laço FOR

Os dois primeiros termos da série são: 0 e 1.
Então, vamos pedir números inteiros acima de 2.

Vamos armazenar nas variáveis ult e penult o último número da sequência e o penúltimo, assim inicialmente:
ult = 1
penult = 0

Pedimos o número ao usuário e armazenamos em n.
Vamos para a nossa estrutura de repetição, o FOR.

Como já exibimos os dois primeiros termos da sequência: 0 e 1
Nossa contagem começa no terceiro membro da sequência: aux = 3
E ele vai até percorrer n iterações: aux <= n
Isso garante que n elementos da sequência sejam exibidos.

Dentro do FOR, primeiro, imprimimos o próximo termo: ult + penult

Agora vem o pulo do gato.
O novo valor de ult será a soma dele mesmo com o número anterior, penult.
E o valor novo de penult será ult.

Queremos fazer isso:
penult = ult = 1
ult = 1 + 0 = 1

O problema é que quando fazemos: penult = ult, o valor original de penult é perdido, que é o valor antigo que iríamos utilizar para calcular o novo valor de ult.

A solução pra isso é armazenar o valor antigo de penult na variável temporária temp.
Então é só fazer:
temp = penult;
penult = ult;
ult = ult + temp;

Pronto, agora a sequência 'andou', e está pronta para exibir o próximo termo.
Veja como fica nosso código:
#include <iostream>
using namespace std;

int main()
{
    int n, aux, temp, ult=1, penult=0;

    cout << "Exibir quantos termos: ";
    cin >> n;

    cout << penult << endl << ult << endl;

    for(aux=3 ; aux<=n ; aux++){
        cout << (ult+penult) << endl;

        temp = penult;
        penult = ult;
        ult = ult + temp;
    }

    return 0;
}

Fibonacci com laço WHILE em C++

#include <iostream>
using namespace std;

int main()
{
    int n, aux=3, temp, ult=1, penult=0;

    cout << "Exibir quantos termos: ";
    cin >> n;

    cout << penult << endl << ult << endl;

    while(aux<=n){
        cout << (ult+penult) << endl;

        temp = penult;
        penult = ult;
        ult = ult + temp;

        aux++;
    }

    return 0;
}
Você consegue fazer com laço DO WHILE, que fica calculando quantos termos quiser, em um looping que só acaba quando o usuário digita 0?

Escreva nos comentários.

Nenhum comentário:

Postar um comentário