Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Fibonacci - Dúvida

Pessoal, boa noite.

Gostaria entender melhor o motivo da lógica abaixo não retornar os valores corretos para o exercício proposto, poderiam dar uma ajuda?

        private void button1_Click(object sender, EventArgs e)
        {
            int anterior = 0;
            string resultado = "";

            for (int atual = 1; atual <= 100; atual++)
            {
                resultado += atual + " ";
                int proximo = anterior + atual;
                anterior = atual;
                atual = proximo;
            }

            MessageBox.Show("for: " + resultado);
        }

Desde já, grato pela ajuda.

2 respostas
solução!

Natanael,

Primeiro de tudo, quando for postar um código, coloque três crases (```) antes e depois do seu código para ficar com uma formatação amigável para entendermos. Eu editei seu post para ficar correto, blz?

Um dos problemas que você vai ter é usar o for para resolver essa questão. O for é um loop que se repete com um incremento fixo. Dá para fazer o código do Fibonacci com ele, mas fica confuso. O melhor é o while.

Para você fazer essa conta, você vai precisar de três variáveis (duas delas você já escreveu). Uma para guardar o valor anterior, outra para guardar o valor atual, e outra para guardar a soma do valor anterior com o valor atual. Além disso, você esqueceu de imprimir os dois primeiros valores: 0 e 1. Dito isso, veja:

int soma = 0;
int anterior = 0;
int atual = 1;
string resultado = "0, 1";

Como eu disse, o melhor seria você mudar de for para while. A condição é fazer o cálculo até que um número passe de 100. Ou seja, enquanto a soma do número atual com o número anterior for menor do que 100, fazemos o cáculo e passamos para o próximo.

int soma = 0;
int anterior = 0;
int atual = 1;
string resultado = "0, 1";

while(soma < 100)
{

}

Agora fica mais simples de você pensar na fórmula. Quer tentar de novo fazer o cálculo por conta própria? Eu poderia colocar aqui a resposta, mas é mais legal quando tentamos :)

Opa Arthur, valeu pela explicação! :)

Consegui matar aqui.

Utilizei a variável "proximo" no lugar de soma.

Seguem os códigos para o for e while:

        private void button1_Click(object sender, EventArgs e)
        {
            int atual = 1;
            int anterior = 0;
            string resultado = "0 ";

            while (atual <= 100)
            {
                resultado += atual + " ";
                int proximo = anterior + atual;
                anterior = atual;
                atual = proximo;
            }

            MessageBox.Show("while: " + resultado);

            int anterior2 = 0;
            string resultado2 = "0 1 ";

            for (int atual2 = 1; atual2 <= 100; atual2++)
            {
                resultado2 += atual2 + " ";
                int proximo2 = anterior2 + atual2;
                anterior2 = atual2 - 1;
                atual2 = proximo2;
            }

            MessageBox.Show("for: " + resultado2);
        }

Grato. :)