Analise o trecho de código PHP a seguir. function contador(...
function contador($inicio, $fim)
{
if ($fim > $inicio)
{
return;
}
contador($inicio --, ++$fim);
}
$inicio = 5;
$fim = 2;
contador ($inicio, $fim);
Quantas vezes a função “contador()” será executada?
A quantidade de itens certos é igual a
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: C - 5
A questão envolve o entendimento da recursão em PHP, que é um conceito onde uma função chama a si mesma. Para identificar quantas vezes a função contador() será executada, precisamos acompanhar a lógica implementada no bloco de código.
A função contador() recebe dois parâmetros, $inicio e $fim, e realiza uma checagem condicional (if
) para decidir se deve continuar chamando a si mesma ou não. O critério de parada é quando o valor de $fim for maior do que $inicio. Caso contrário, a função se chamará recursivamente, decrementando $inicio e incrementando $fim.
Se analisarmos o código, vemos que os valores iniciais fornecidos são $inicio = 5 e $fim = 2. A cada chamada recursiva, $inicio é decrementado (--
pós-fixado) e $fim é incrementado (++
pré-fixado), o que significa que em cada chamada, a diferença entre $inicio e $fim é reduzida em 2 unidades.
Vamos traçar as chamadas:
- 1ª chamada: $inicio = 5, $fim = 2
- 2ª chamada: $inicio = 4, $fim = 3
- 3ª chamada: $inicio = 3, $fim = 4
- 4ª chamada: $inicio = 2, $fim = 5
- 5ª chamada: $inicio = 1, $fim = 6
Na 5ª chamada, a condição $fim > $inicio
torna-se verdadeira, e a função retorna sem fazer uma nova chamada recursiva. Portanto, a função contador() é chamada 5 vezes antes de parar.
O conhecimento necessário para resolver a questão envolve a compreensão do mecanismo de recursão, a ordem de avaliação dos operadores de incremento e decremento em PHP, e a habilidade de rastrear a execução do código passo a passo.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
$inicio-- Pós-decremento Retorna $inicio, e então decrementa $inicio em um.
++$fim Pré-incremento Incrementa $fim em um, e então retorna $fim.
$inicio = 5;
$fim = 2;
if ($fim > $inicio)
if (2 > 5) // 1º execução
if (2 > 4) // 2º execução
if (2 > 3) // 3º execução
if (2 > 2) // 4º execução
if (2 > 1) // 5º execução
$inicio-- Pós-decremento = Retorna $inicio, e então decrementa $inicio em um, MAS NÃO ENVIA O VALOR COM DECREMENTO PARA A NOVA CHAMADA RECURSIVA.
++$fim Pré-incremento = Incrementa $fim em um, e então retorna $fim, ENVIANDO O VALOR INCREMENTADO PARA A NOVA CHAMADA RECURSIVA
Função original -----------> Inicio = 5 Fim = 2
1ª chamada recursiva ---> Inicio = 5 Fim = 3
2ª chamada recursiva ---> Inicio = 5 Fim = 4
3ª chamada recursiva ---> Inicio = 5 Fim = 5
4ª chamada recursiva ---> Inicio = 5 Fim = 6
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo