Olá Igor! Aqui ambos os códigos funcionaram, a diferença é que no segundo gera um loop infinito. Talvez sua dúvida seja porque esse comportamento diferente.
Veja só, no primeiro código foi colocado um if e um else, o que acontece é que quando o código do if()
é executado o código do else
não é executado. O else só é executado caso a sentença do if não seja verdadeira.
No entanto, seu segundo código você utilizou dois if()
o que acontece é que mesmo executando o primeiro if o segundo também pode ser executado e é por isso que gera um loop infinito.
Repare que as sequencia de números que será impressa no primeiro código é:
40, 20, 10, 5, 16, 8, 4, 2, 1. Porem eu quero que você atente para os três últimos números (4, 2 e 1). No primeiro código, quando número for 4 ele atende a condição do if()
sendo então dividido por 2, passando a ser 2 e então é impresso o número 2. Perceba que 2 é diferente de 1 então o loop continua. Então quando número vale 2 também atende a condição do if()
sendo então dividido por 2 novamente, passando a ser 1. Quando isso ocorre o loop para, pois 1 não é diferente de 1, encerrando a sequencia. Perceba que em nenhum momento o else foi chamado nessa pequena execução, pois todos os casos atenderam ao if().
Agora vamos analisar o segundo código. Quando numero
vale 4 o que acontece é que ele atende o primeiro if()
sendo então dividido por 2, passando a ser 2, porem como o código seguinte é outro if()
é verificado se ele atende esse segundo if()
, como não atende não é executado nada e por 2 ser diferente de 1 o loop continua. Então numero
valendo 2 atende a condição do primeiro if()
novamente, sendo então dividido por 2, passando a valer 1. Porém aqui que está o problema, quando número vale 1 ele atende a condição do segundo if()
sendo então o código do segundo if()
executado e número passando a valer 4 e como 4 é diferente de 1 o loop continua.
Se você executar passo a passo seu código em Debug, verá que é formada a seguinte sequencia:
40, 20, 10, 5, 16, 8, 4, 2, 1, 4, 2, 1, 4, 2, 1 ....
Então este é o problema, quando utilizamos dois if()
ambos são verificados e se ambas as condições forem verdadeiras ambos os códigos são executados. Porém isso não ocorre com if e else, quando o if() é executado o código do else não é executado.
Enfim, espero ter ajudado! Bons estudos!