Em uma aula de Computação, uma turma analisou um algoritmo que reorganiza uma lista de inteiros por meio de…
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 aula de Computação, uma turma analisou um algoritmo que reorganiza uma lista de inteiros por meio de chamadas recursivas. Diferentemente da soma prefixada usual, o algoritmo abaixo processa primeiro o restante da lista e, ao retornar, acrescenta ao primeiro elemento o último valor já produzido. func soma_prefixos(L): se L == [] então retorne [] senao R := soma_prefixos(resto(L)) se R == [] então retorne [primeiro(L)] senao retorne concatenar([primeiro(L) + ultimo(R)], R) A função concatenar([x], R) coloca o elemento x no início da lista R. Considerando exatamente as regras de execução apresentadas no texto-base, qual lista é retornada pela chamada soma_prefixos([2, -1, 4])?
- A) [6, 3, 4]
- B) [6, 4, 3]
- C) [2, 1, 5]
- D) [2, 3, 7]
- E) [4, 3, 6]
✅ Resposta correta: alternativa A
Resolução passo a passo
- Resolvo a chamada soma_prefixos([2, -1, 4]) seguindo as regras do texto-base, começando pela chamada mais interna. Passo 2: soma_prefixos([4]) chama soma_prefixos([]), que retorna []. Como R é [], o resultado é [primeiro([4])] = [4]. Passo 3: soma_prefixos([-1, 4]) recebe R = [4]. Como R não é vazio, calcula primeiro(L) + ultimo(R) = -1 + 4 = 3 e concatena [3] com R, obtendo [3, 4]. Passo 4: soma_prefixos([2, -1, 4]) recebe R = [3, 4]. Calcula primeiro(L) + ultimo(R) = 2 + 4 = 6 e concatena [6] com R, obtendo [6, 3, 4]. Passo 5: Conclusão: a lista retornada é [6, 3, 4], alternativa A, que coincide com o gabarito oficial. Passo 6: Por que as outras estão erradas: B inverte a ordem de inserção do novo elemento, E inverte a leitura da lista final, C corresponde à soma prefixada usual da esquerda para a direita, e D não aplica a regra ao primeiro elemento da lista.
💡 Dica: Analise o algoritmo e aplique-o à lista fornecida.
Alternativa por alternativa
A chamada com [2, -1, 4] é resolvida a partir das listas menores. Para [4], o restante é vazio, portanto o retorno é [4]. Para [-1, 4], soma-se -1 ao último elemento de [4], obtendo [3, 4]. Finalmente, para [2, -1, 4], soma-se 2 ao último elemento de [3, 4], que é 4, e o resultado é [6, 3, 4].
O aluno acredita que o novo valor deve ser colocado no fim da lista retornada, e não no início, como indica a função concatenar([x], R). Ele ainda pode ter feito a conta corretamente, mas montou a lista na ordem errada.
Por que engana: Confundir a ordem das operações e somar os elementos de forma incorreta, resultando em uma lista errada.
O aluno aplica a soma prefixada usual, acumulando da esquerda para a direita (2, 2 + (-1) = 1, 1 + 4 = 5), o que contraria a instrução de que o algoritmo processa primeiro o restante da lista.
O aluno calcula corretamente os valores -1 + 4 = 3 e 3 + 4 = 7, mas não aplica a regra ao primeiro elemento e mantém o 2 original, ignorando que o primeiro elemento também deve receber a soma com o último valor produzido.
O aluno obtém os valores certos, mas lê ou escreve a lista resultante de trás para frente, invertendo a ordem final dos elementos em relação à saída produzida pelas chamadas recursivas.
Raio-X da questão
algoritmo recursivo
avaliacao
funções recursivas · listas em programação
Revisar como funcionam algoritmos recursivos e somas prefixadas.
Confundir a ordem das operações e somar os elementos de forma incorreta, resultando em uma lista errada.
ciencia_tecnologia
pensamento_critico
abstrato
Questões parecidas com resolução
- Em uma atividade de organização de dados, uma função recebe uma lista e constrói outra lista. Se a lista recebida…
- Uma função recursiva soma(lista): se lista vazia retorna 0; senão retorna primeiro + soma(resto). Aplicando essa…
- Qual seria o resultado de um algoritmo que utiliza recursão para somar os elementos de uma lista de números?
- Analise o pseudocódigo abaixo que processa uma lista L e uma variável acumuladora acc. A chamada inicial é somar(L,0). A…
- Ao criar uma função que utiliza recursão para somar todos os elementos de uma lista, qual é a base dessa função?
- Experimento curto para observar diferentes formas de somar números de uma lista: siga os passos 1) crie a lista…
🔎 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
