Questão nº 52
Questão de Tecnologia da Informação - Programação · FGV DPE-RS 2023 (nº 52)
Atualmente sob responsabilidade da ECMA International, o Java Script (ECMA 6) utiliza o padrão de arrow function para a definição de funções, aproximando um pouco mais a linguagem do paradigma funcional.
Considerando uma função para a multiplicação de dois valores, na forma recursiva, sua implementação no padrão arrow function é:
- A`let fnx = (a,b) => (b>1) ? a * fnx(a, b-1) : a;`
- B`let fnx = (a,b) => (b>1) ? b + fnx(a, b-1) : a;`
- C`let fnx = (a,b) => (a>1) ? b * fnx(a-1, b) : a;`
- D`let fnx = (a,b) => (b>1) ? a + fnx(a, b-1) : a;` (alternativa correta)
- E`let fnx = (a,b) => (a>1) ? b * fnx(a, b) : a-1;`
Resposta comentada
Gabarito Alternativa D
Recursão é quando uma função chama a si mesma para resolver um problema, dividindo-o em partes menores até chegar a um caso básico que ela sabe resolver. A multiplicação de dois números, como , pode ser entendida como somar o número a si mesmo vezes.
- (A) Incorreta: Esta alternativa tenta multiplicar
apelo resultado da chamada recursiva, o que não representa a multiplicação como soma repetida. Por exemplo,fnx(3, 2)resultaria em3 * fnx(3, 1)que é3 * 3 = 9, e não6. A armadilha aqui é usar o operador de multiplicação (*) na etapa recursiva, o que leva a um cálculo de potência () ou a um resultado incorreto para multiplicação. - (B) Incorreta: Esta alternativa adiciona
bao resultado da chamada recursiva (b + fnx(a, b-1)), quando o correto seria adicionara(o primeiro operando) repetidamente. - (C) Incorreta: Esta alternativa inverte a lógica, decrementando
ae multiplicando porb, o que não corresponde à definição de multiplicação recursiva como soma repetida deaporbvezes. - (D) Correta: Esta é a implementação correta. Ela define a multiplicação de como a soma de
acom o resultado de . O caso base(b>1) ? ... : agarante que, quandobchega a1, a função retornaa(pois ), encerrando a recursão e somandoao número correto de vezes. - (E) Incorreta: Esta alternativa contém um erro grave: a chamada recursiva
fnx(a, b)não altera os argumentos, o que levaria a uma recursão infinita (loop eterno) seafor maior que 1, já que a condiçãoa>1nunca se tornaria falsa.
Fonte: FGV DPE-RS 2023 Técnico - Apoio Especializado (Programador) (Caderno Tipo 1). Reproduzida para fins de estudo.