E no vigésimo episódio desta serie que queima os miolos, vamos abordar um problema envolvendo o crescimento de uma árvore que cresce de uma forma um tanto diferente.
Neste problema temos uma árvore utópica que passa por 2 ciclos de crescimento a cada ano. Na primavera dobra de altura e no verão aumenta em 1 de altura (seja qual for o sistema de medição que você queira usar). O objetivo da função é gerar a altura da árvore após um certo número de ciclos de crescimento.
Se quisermos saber a altura da árvore após 5 ciclos de crescimento, calcularemos atribuindo este valor a variável n da seguinte forma:
Nossa entrada n é a variável que conterá o número de ciclos de crescimento. Contamos a altura da árvore a partir do ciclo de crescimento 0.
No ciclo 0, a altura inicial da árvore é 1.
No ciclo 1, a árvore dobra de altura, então sua altura agora é 2.
No ciclo 2, a árvore aumenta de altura em 1. A altura da árvore é 3.
No ciclo 3, a árvore dobra de altura novamente, então sua altura agora é 6.
No ciclo 4, a árvore aumenta de altura em 1. A altura da árvore agora é 7.
No ciclo final, a árvore dobra de altura, tornando a altura da árvore 14.
A função produzirá 14.
Começamos a ver um padrão ao ver como chegamos à nossa resposta. Começando no ciclo 1, se o número do ciclo for ímpar, a árvore dobra de altura. Se for par, a árvore só aumenta de altura em 1.
Para trabalhar isso na nossa função, atribuiremos isso a duas variáveis desta forma:
Nossa variável de ciclo nos ajudará a rastrear a altura da árvore em cada ciclo de crescimento conforme contamos de 1 a n. Conhecemos a altura inicial da árvore no ciclo 0, então queremos começar a medir a altura da árvore a partir do ciclo 1.
A variável de altura manterá a altura da árvore. A função produzirá esta variável. Começamos a contar por 1, pois é a altura inicial da árvore.
Em seguida, usamos um loop while desta forma:
Queremos que nosso loop while continue em loop até que nossa variável de ciclo não seja maior que nossa entrada n.
Em nosso exemplo acima, notamos que se o ciclo de crescimento for um número ímpar, a árvore dobrará de altura. Portanto, independentemente da altura atual da árvore, nós a multiplicamos por 2.
OBS: A equação dentro da instrução if, height *= 2;, é uma forma abreviada de escrever height = height * 2;.
Se o ciclo de crescimento for um número par, incrementamos a altura da árvore em 1.
Depois que o loop passa pela instrução if, incrementamos a variável do ciclo para podermos medir a altura da árvore no próximo ciclo de crescimento.
Depois que o loop é feito, retornamos a variável de altura.
Nossa função completa vai ficar desta forma:
E assim fechamos mais um desafio.
Top comments (0)