Em uma atividade de organização de dados, uma função recebe uma lista e constrói outra lista. Se a lista…
Publicado por Alexandre Lombardi dos Santos, fundador do GeraProva
Elaborar algoritmos que envolvam instruções sequenciais, de repetição e de seleção usando uma linguagem de programação.
Fonte: Base Nacional Comum Curricular (MEC).Questão
Em uma atividade de organização de dados, uma função recebe uma lista e constrói outra lista. Se a lista recebida estiver vazia, a função devolve uma lista vazia. Caso contrário, ela retira o primeiro elemento, aplica-se novamente ao restante da lista e, ao final, acrescenta o primeiro elemento retirado. Essa operação pode ser representada pelo pseudocódigo: funcao inverter(L): se L == [] entao retorne [] senao retorne concatenar(inverter(resto(L)), [primeiro(L)]) A função concatenar une as duas listas preservando a ordem de seus elementos. Considerando o funcionamento da recursão e a lista L = [1, 2, 3, 4], qual lista será retornada pela função inverter(L)?
- A) [1, 2, 3, 4]
- B) [4, 3, 2, 1]
- C) [2, 3, 4, 1]
- D) [3, 4, 1, 2]
- E) [4, 1, 2, 3]
✅ Resposta correta: alternativa B
Resolução passo a passo
- A função inverter(L) retorna []. Se a lista estiver vazia; caso contrário, concatena o resultado de inverter(resto(L)) com a lista unitária [primeiro(L)].
- Aplicando a L = [1, 2, 3, 4]: primeiro(L) = 1 e resto(L) = [2, 3, 4]. Logo inverter([1,2,3,4]) = concatenar(inverter([2,3,4]), [1]).
- inverter([2,3,4]) = concatenar(inverter([3,4]), [2]).
- inverter([3,4]) = concatenar(inverter([4]), [3]).
- inverter([4]) = concatenar(inverter([]), [4]) = concatenar([], [4]) = [4].
- Voltando: inverter([3,4]) = [4] + [3] = [4, 3]; inverter([2,3,4]) = [4, 3] + [2] = [4, 3, 2]; inverter([1,2,3,4]) = [4, 3, 2] + [1] = [4, 3, 2, 1].
- Portanto a resposta correta é a alternativa B, [4, 3, 2, 1], que é a lista original invertida, como esperado de uma função de inversão.
- Por que as outras estão erradas: A) é a lista original sem inversão; C) e D) são rotações da lista original, que surgiriam de concatenar o primeiro elemento antes do restante; E) mistura a ordem dos elementos e não corresponde a nenhuma aplicação correta da recursão.
💡 Dica: Analise a função recursiva e a lista fornecida.
Alternativa por alternativa
Acredita que a função apenas devolve a lista original, ignorando que a concatenação ocorre com o primeiro elemento colocado no final da chamada recursiva.
Por que engana: Confundir o número de chamadas da função com o resultado final da lista invertida, focando apenas na contagem de chamadas em vez do retorno da função.
A função faz chamadas sucessivas com [2, 3, 4], [3, 4], [4] e []. Ao retornar da recursão, acrescenta os primeiros elementos retirados na ordem inversa: 4, depois 3, depois 2 e, por fim, 1. Portanto, a lista retornada é [4, 3, 2, 1].
Imagina que o primeiro elemento é movido para o fim da lista de uma única vez, sem considerar que a recursão aplica o mesmo processo ao restante, o que gera a inversão completa.
Aplica a recursão de forma incompleta, deslocando apenas parte dos elementos e tratando o restante da lista como se fosse mantido na ordem original.
Erra ao resolver as chamadas recursivas, misturando a ordem dos elementos na concatenação e não respeitando que o resultado de inverter(resto(L)) vem antes de [primeiro(L)].
Raio-X da questão
função recursiva
avaliacao
função recursiva · listas em pseudocódigo
Revisar conceitos de recursão e manipulação de listas.
Confundir o número de chamadas da função com o resultado final da lista invertida, focando apenas na contagem de chamadas em vez do retorno da função.
ciencia_tecnologia
pensamento_critico
abstrato
Questões parecidas com resolução
- Em uma aula de Computação, uma turma analisou um algoritmo que reorganiza uma lista de inteiros por meio de chamadas…
- Desenvolva uma função que utilize recursão para inverter uma lista de números. Explique como sua lógica funcionaria e…
- Projete em pseudocódigo uma função recursiva permutar(L) que recebe uma lista L com n elementos distintos e retorna uma…
- Projete em pseudocódigo uma função recursiva duplicar(L) que recebe uma lista L de inteiros e retorna uma nova lista em…
- Projete uma função recursiva em pseudocódigo flatten(L) que recebe uma lista L que pode conter inteiros e sublistas…
- Projete em pseudocódigo uma função recursiva subsequencias(L) que recebe uma lista L de inteiros e retorna a lista de…
🔎 Procurar outra questão
Procure no banco do GeraProva pelo tema ou por um trecho do enunciado. Cada questão já vem com resolução comentada e a análise de cada alternativa.
Professor: monte a prova com questões como esta, com gabarito e folha de respostas, em 30 segundos. Ver planos · Blog
