Olá, Leo!
O que o + 1 faz?
Imagine que você tem uma roleta com números de 0 a 3. Ao adicionar 1 a cada número sorteado nessa roleta, você estará, na verdade, "empurrando" todos os números um passo à frente. O que antes era 0 se torna 1, o que era 1 se torna 2, e o que era 2 se torna 3. O número 3, que antes não existia na roleta original, agora passa a existir.
Por que não incluímos o 0?
Intervalo desejado: O objetivo da expressão é gerar números aleatórios entre 1 e 3, ambos inclusive. Ao adicionar 1 ao resultado de Math.random() * 3, garantimos que o menor valor possível seja 1 e o maior seja 3.
Funcionamento do Math.random(): A função Math.random() gera um número aleatório entre 0 (inclusive) e 1 (exclusivo). Isso significa que o resultado pode ser 0, mas nunca será exatamente 1. Ao multiplicar por 3 e adicionar 1, garantimos que o resultado mínimo seja 1.
Por que a alternativa B está incorreta?
A alternativa B, parseInt(Math.random() * 4), geraria números entre 0 e 3. Isso acontece porque ao multiplicar por 4, os possíveis resultados seriam números entre 0 e 3.9999... Ao aplicar parseInt, a parte decimal é descartada, resultando em números inteiros de 0 a 3.
O + 1 na expressão parseInt(Math.random() * 3) + 1 serve para deslocar o intervalo de valores gerados por Math.random() * 3 para o intervalo desejado de 1 a 3. Sem o + 1, o intervalo seria de 0 a 2.
Espero ter ajudado.