Questão de Programação — Linguagens de marcação — FGV 2024
- Código
- fg077401
- Banca
- FGV
- Órgão
- CVM
- Ano
- 2024
- Nível
- Superior
- Cargo
- Analista - Perfil 8 - TI / Sistemas e Desenvolvimento - Tarde
- A6;
- B12;
- C34;
- D36;
- E45.
GabaritoC — 34;
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.
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ª 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)
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)
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)
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.
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.
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