Pular para o conteúdo principal

Questão de Programação — Linguagens de marcação — FGV 2024

ProgramaçãoLinguagens de marcação
Código
fg077401
Banca
FGV
Órgão
CVM
Ano
2024
Nível
Superior
Cargo
Analista - Perfil 8 - TI / Sistemas e Desenvolvimento - Tarde
Ao implementar algumas funcionalidades em sua página pessoal, Lucas fez um teste, com base no código Java Script apresentado a seguir, em um trecho do HTML.<script> const f = function(...v){ a = v.length>0?v.length*v[0]:0; v.splice(0,1); return a==0?a:a+f(...v); } console.log(f(...[1,2,3,...[0,1],3,2])); </script> Quando Lucas abriu a página, o valor impresso no console foi:
  1. A6;
  2. B12;
  3. C34;
  4. D36;
  5. E45.
Revelar gabarito e comentário

GabaritoC — 34;

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Recursão e spread em JavaScript

Gabarito: letra C. O código define uma função recursiva f que recebe argumentos via rest parameter (...v). A cada chamada, a recebe v.length * v[0] (se houver elementos) e depois remove o primeiro elemento com splice. A recursão continua até v ficar vazio, somando os valores de a. No final, console.log(f(...[1,2,3,...[0,1],3,2])) imprime 34.

Passo a passo da execução

A chamada f(...[1,2,3,...[0,1],3,2]) equivale a f(1,2,3,0,1,3,2). O array inicial v tem 7 elementos.

  1. 1ª chamada: v = [1,2,3,0,1,3,2]

    a = 7 * 1 = 7

    v.splice(0,1)v = [2,3,0,1,3,2]

    Retorna 7 + f(2,3,0,1,3,2)

  1. 2ª chamada: v = [2,3,0,1,3,2]

    a = 6 * 2 = 12

    v.splice(0,1)v = [3,0,1,3,2]

    Retorna 12 + f(3,0,1,3,2)

  1. 3ª chamada: v = [3,0,1,3,2]

    a = 5 * 3 = 15

    v.splice(0,1)v = [0,1,3,2]

    Retorna 15 + f(0,1,3,2)

  1. 4ª chamada: v = [0,1,3,2]

    a = 4 * 0 = 0

    v.splice(0,1)v = [1,3,2]

    a == 0, retorna 0 (caso base, não chama recursivamente)

Soma total: 7 + 12 + 15 + 0 = 34.

Análise das alternativas

  • A) 6 – ❌ Incorreta. Esse valor seria obtido se a recursão parasse na primeira chamada ou se os cálculos estivessem errados (ex.: somar apenas os primeiros elementos sem multiplicar pelo comprimento).

  • B) 12 – ❌ Incorreta. Corresponde apenas ao valor de a na segunda chamada, ignorando as demais.

  • C) 34 – ✅ Correta. Como demonstrado.

  • D) 36 – ❌ Incorreta. Próximo, mas incorreto. Talvez obtido se o splice removesse o último elemento ou se a multiplicação fosse por índice.

  • E) 45 – ❌ Incorreta. Valor muito alto, provável confusão na contagem.

Diagrama do fluxo

PEGA ESSA DICA!

Em funções recursivas com modificação do array (splice), acompanhe o comprimento e o primeiro elemento a cada iteração. Montar uma tabela com os valores de v.length, v[0], a e o resultado parcial evita erros de contagem.

Gabarito: letra C.

Link permanente: /questoes/fg077401