Questão nº 37
Questão de Tecnologia da Informação · FGV CVM 2024 (nº 37)
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:
- A6;
- B12;
- C34; (alternativa correta)
- D36;
- E45.
Resposta comentada
Gabarito Alternativa C
A função JavaScript utiliza recursão, onde uma função chama a si mesma, para calcular um valor, processando um array e modificando-o a cada passo, com uma condição de parada crucial.
Chamada inicial: f(...[1,2,3,...[0,1],3,2]) expande o array para [1,2,3,0,1,3,2].
Passo a passo da execução:
f([1,2,3,0,1,3,2]):v.length=7,v[0]=1.a=7*1= 7.vse torna[2,3,0,1,3,2]. Retorna7 + f([2,3,0,1,3,2]).f([2,3,0,1,3,2]):v.length=6,v[0]=2.a=6*2= 12.vse torna[3,0,1,3,2]. Retorna12 + f([3,0,1,3,2]).f([3,0,1,3,2]):v.length=5,v[0]=3.a=5*3= 15.vse torna[0,1,3,2]. Retorna15 + f([0,1,3,2]).f([0,1,3,2]):v.length=4,v[0]=0.a=4*0= 0.vse torna[1,3,2]. Comoaé 0, a condiçãoa==0?a:...faz a função retornar 0 imediatamente, encerrando a recursão neste ramo.
Somando os retornos:
- A Chamada 4 retorna
0. - A Chamada 3 retorna
15 + 0=15. - A Chamada 2 retorna
12 + 15=27. - A Chamada 1 retorna
7 + 27=34.
O valor final impresso é 34.
(A) Incorreta: O valor 6 não é obtido por esta lógica de cálculo.
(B) Incorreta: O valor 12 é apenas um dos resultados intermediários da soma, não o final.
(C) Correta: O cálculo passo a passo demonstra que o valor final retornado pela função é 34, devido à condição de parada da recursão quando a se torna 0.
(D) Incorreta: O valor 36 não é obtido seguindo a lógica da função.
(E) Incorreta: Esta é a armadilha da banca. O valor 45 seria obtido se a condição a==0?a: fosse ignorada quando v[0] é 0, fazendo a recursão continuar mesmo quando o produto v.length * v[0] resulta em zero, e só parasse quando o array v estivesse completamente vazio. No entanto, a função retorna 0 assim que a (o produto) se torna 0, independentemente de o array estar vazio ou não.
Fonte: FGV CVM 2024 Analista CVM - TI Sistemas e Desenvolvimento (Perfil 8) (Caderno Tipo 1). Reproduzida para fins de estudo.