Aprender / Laço while: dividir por 2

Laço while: dividir por 2

Use while quando você não sabe de antemão quantas voltas serão necessárias.

Enunciado

Uma folha de papel é dobrada ao meio várias vezes. Dado o número n, conte quantas divisões inteiras por 2 são necessárias até que o valor chegue a 1 ou menos. Use divisão inteira (descarte a parte decimal, com Math.floor).

Escreva quantasDivisoes(n), que retorna essa quantidade.

Exemplos:

  • quantasDivisoes(8) retorna 3 (8 → 4 → 2 → 1)
  • quantasDivisoes(10) retorna 3 (10 → 5 → 2 → 1)
  • quantasDivisoes(1) retorna 0

Processamento local: nada do que você digita sai do seu navegador.

O conceito

O while repete um bloco enquanto uma condição for verdadeira. Diferente do for, ele é ideal quando você não sabe quantas voltas serão necessárias.

É como encher um balde: enquanto ele não estiver cheio, continue despejando água. Você não sabe quantos copos serão necessários, só sabe quando parar.

let n = 8;
let voltas = 0;
while (n > 1) {
  n = Math.floor(n / 2);
  voltas++;
}
// voltas vale 3

Erros comuns

  • Esquecer de alterar a variável da condição dentro do laço: o programa fica preso para sempre (laço infinito).
  • Esquecer o Math.floor e dividir números ímpares, ficando com decimais.
  • Trocar > 1 por >= 1, o que nunca termina para n = 1 a menos que haja outra saída.

Perguntas frequentes

O que é um laço infinito?

É um laço cuja condição nunca fica falsa, então ele não termina. Sempre confira se algo dentro dele muda a condição.

Quando usar while em vez de for?

Use for quando sabe o número de voltas. Use while quando a repetição depende de uma condição que muda durante a execução.

Veja também

Precisa de um sistema ou app sob medida?

A VcInova desenvolve software, aplicativos e integrações para empresas de todo o Brasil.

Fale com a VcInova