Um banco comercial possui em sua base de dados uma tabela qu...

Próximas questões
Com base no mesmo assunto
Q3057478 Programação
Um banco comercial possui em sua base de dados uma tabela que informa o cliente que indicou diretamente outro cliente, identificando, de forma correlata, o cliente indicador e o cliente indicado. Essa tabela contém duas colunas, cpfIndicador e cpfIndicado, que contêm, respectivamente, o CPF de quem indicou e o CPF de quem foi indicado. Considerando essa tabela, o departamento de marketing imaginou uma promoção em que o número de pontos que cada cliente faria seria igual ao número de clientes que ele trouxesse ao banco, considerando também, como indicados pelo cliente original, de forma recursiva, todos os clientes indicados por clientes que ele indicou, sucessivamente. Foi solicitado ao setor de TI que gerasse um código JavaScript para implementar essa promoção.
Nesse contexto, considere o código JavaScript incompleto a seguir, do qual uma linha foi removida intencionalmente, na posição indicada com o comentário <<LINHA DE CODIGO>>.
function indicou(lista, indicador) {    let resposta = [];    for (let i = 0; i < lista.length; i++) {      let item = lista[i];      if (item[0] === indicador) {         if (!resposta.includes(item[1])) {          //<< LINHA DE CODIGO >>             resposta.push(item[1]);          }     }  }  return resposta; }


Que linha de código JavaScript pode ser escrita na posição de <<LINHA DE CODIGO>> para garantir uma implementação correta e recursiva?
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

A alternativa correta é a A. Agora, vamos entender o porquê e explorar os conceitos necessários para resolver a questão.

Esta questão aborda conceitos de recursividade e manipulação de arrays em JavaScript. Para resolver o problema, precisamos implementar uma função que calcule, de forma recursiva, todos os clientes indicados direta e indiretamente por um cliente específico. Vamos analisar cada parte da questão.

No código fornecido, a função indicou recebe uma lista de pares de CPFs e um indicador (CPF de quem indicou). O objetivo é retornar todos os CPFs que foram direta ou indiretamente indicados por esse indicador.

A alternativa Aresposta = resposta.concat(indicou(lista, item[1])); — é a correta porque:

  • Concatenação Recursiva: Esta linha chama a função indicou de forma recursiva, passando como novo indicador o CPF atualmente indicado (item[1]). O resultado dessa chamada recursiva é concatenado ao array resposta, garantindo que todos os CPFs indicados direta e indiretamente sejam incluídos na resposta final.

Agora, vejamos por que as outras alternativas estão incorretas:

Bresposta.concat(indicou(lista, item[1]));

  • Erro de Retorno: Esta linha não atualiza o array resposta com o resultado da concatenação. O método concat retorna um novo array, mas aqui ele não está sendo atribuído a nenhuma variável.

Cresposta = indicou(lista, item[1]);

  • Substituição Incorreta: Esta linha substituiria completamente o conteúdo de resposta com o resultado da chamada recursiva, perdendo assim os CPFs já adicionados anteriormente, o que não é o comportamento desejado.

Dresposta.push(item[0]);

  • Inversão de Lógica: Esta linha tentaria adicionar o indicador (que é item[0]) ao array resposta. No contexto dado, queremos adicionar o indicado (item[1]), não o indicador.

Eindicou(lista, item[1]).forEach(resposta.push);

  • Erro de Implementação: Embora a ideia de iterar sobre os resultados faça sentido, a maneira como forEach está sendo chamado não está correta. A função push não está recebendo corretamente os argumentos.

Esses detalhes são fundamentais para garantir que a função trabalhe de forma precisa com a lógica de indicação direta e recursiva. Compreender e aplicar essas nuances da recursão e manipulação de arrays é essencial para resolver de forma eficaz questões como esta.

Gostou do comentário? Deixe sua avaliação aqui embaixo!

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

O método .concat() retorna uma lista contendo os elementos do array original + o(s) elemento(s) retornados. Ou seja, ele não altera o array original que o invocou, e portanto, para atualizar o array "resposta" é necessário atribuir o retorno de .concat() para o mesmo.

O que explica o fato da alternativa B estar incorreta e o gabarito ser a alternativa A -> resposta = resposta.concat(indicou(lista, item[1]));

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo