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

Erro no terceiro loop

Olá, no terceiro loop meu código dá 4 ao invés de 3, que seria o correto pela Série de Fibonacci. Após o cálculo da expressão SerieFibonacci , a variável SerieFibonacci passa a ter o mesmo valor da variável Atual? Porque se for usar o valor da variável Atual encontrada no loop anterior o cálculo não dá certo. Obrigado!

7 respostas

Oi Rômulo.

No terceiro loop vai dar 2, só no quinto que dá 5. Não existe 4 na série de Fibonacci:

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

Posta seu código aqui pra gente dar uma olhada.

Desculpa, eu entendi melhor agora. O meu erro era na expressão serieFibonacci += atual + " "; Eu estava fazendo serieFibonacci = serieFibonacci + atual + ""; Agora entendi e deu certo. Obrigado!

Rômulo, nos dois casos, o resultado esperado é o mesmo. Ou seja, isso aqui:

serieFibonacci += atual + " ";

É o mesmo que isso aqui:

serieFibonacci = serieFibonacci + atual + " ";

O operador += já soma o que vem depois do operador ao valor do que vem antes do operador.

Então não entendi, no primeiro lopp a serie fibonnaci dá 1, correto? No segundo loop na expressão referida seria 1(seriefibonacci anterior) + 1 (atual (atual = proximo = anterior(0) + atual(1)), o que daria 2. Se continuasse no próximo loop, seriefibonacci = 2 + 2(atual), o que daria 4. Por isso, perguntei se após o cálculo da expressão seriefibonacci, a variável atual passa a ter o mesmo valor da variável seriefibonacci e não o valor considerado no loop anterior. Sei que não estou entendendo algo, desculpe a persistência na dúvida.

solução!

Rômulo, aí que está o erro. Vou fazer uma tabelinha, olha só os valores das variáveis em cada iteração:

anterior   atual     fib
       0   +   1  =    1
       1   +   1  =    2
       1   +   2  =    3
       2   +   3  =    5
       3   +   5  =    8
       5   +   8  =   13
       8   +  13  =   21
      13   +  21  =   34
      21   +  34  =   55
      34   +  55  =   89
      55   +  89  =  144
       .       .       .
       .       .       .
       .       .       .

Repare no seguinte: o valor de atual sempre é transferido para anterior e o valor de fib (representando o valor do cálculo de fibonacci) sempre é transferido para atual. Assim, esses dois valores são somados para calcular fib.

Ok, obrigado!

Rômulo, é exatamente a persistência que vai sempre te levar ao completo entendimento. Tem que perguntar tudo mesmo.

Vamos lá...

No primeiro loop, a variável serieFibonacci (que, neste momento, é uma string vazia) receberá o valor dela mesma + o valor da variável atual + espaço em branco.

Depois, a variável inteira proximo receberá o valor da variável anterior que é 0, mais o valor de atual que é 1. Ou seja, proximo agora vale 1.

Por fim, anterior recebe o valor de atual que ainda é 1 (anterior valia 0 e agora vale 1) e atual recebe o valor de proximo (atual valia 1 e permanece como 1).

Até agora, temos o seguinte:

serieFibonacci => "1 "
anterior => 1
atual => 1
proximo => 1

No segundo loop, vamos ver o que ocorre:

A variável serieFibonacci recebe o valor dela mesmo + o valor de atual que é 1.

proximo recebe o valor de anterior (1) + valor de atual (1), ficando com valor 2.

anterior (que tem valor 1) recebe o valor de atual (que vale 1), permanecendo como 1.

atual recebe o valor de próximo, alterando seu valor de 1 para 2.

Neste momento, temos:

serieFibonacci => "1 1  "
anterior => 1
atual => 2
proximo => 2

Nos próximos três loops, ficaria assim:

Loop #3

serieFibonacci => "1 1 2 "
anterior => 2
atual => 3
proximo => 3

Loop #4

serieFibonacci => "1 1 2 3 "
anterior => 3
atual => 5
proximo => 5

Loop #5

serieFibonacci => "1 1 2 3 5 "
anterior => 5
atual => 8
proximo => 8

Consegue enxergar os valores dos próximos loops?