GeraProva GeraProva Provas com IA para professores do Brasil
Computação1ª sérieBNCC EM13CO03Média⏱ medio

A função abaixo soma uma lista dividindo o problema em uma parte menor a cada chamada: função somar(lista): se…

Publicado por Alexandre Lombardi dos Santos, fundador do GeraProva

Habilidade BNCC EM13CO03

Identificar o comportamento dos algoritmos no que diz respeito ao consumo de recursos como tempo de execução, espaço de memória e energia, entre outros.

Fonte: Base Nacional Comum Curricular (MEC).

Questão

A função abaixo soma uma lista dividindo o problema em uma parte menor a cada chamada: função somar(lista): se lista estiver vazia, retorne 0 retorne lista[0] + somar(lista a partir do segundo elemento) Considere a seguinte implementação de uma função recursiva para somar elementos de uma lista. Como você poderia otimizar essa função?

  1. A) Usar uma variável global
  2. B) Adicionar uma condição de parada
  3. C) Transformar a lista em um vetor
  4. D) Duplicar as chamadas recursivas
  5. E) Usar uma função acumuladora

✅ Resposta correta: alternativa E

Resolução passo a passo

  1. A função dada calcula a soma de forma recursiva. Cada chamada processa o primeiro elemento e delega o restante a uma nova chamada, o que exige uma pilha de chamadas com um quadro para cada elemento da lista. Passo 2: A otimização consiste em transformar a recursão em recursão de cauda, usando uma função acumuladora. Ela recebe um parâmetro extra (por exemplo, acc, que começa com 0) que guarda a soma parcial: se a lista estiver vazia, retorna acc; senão, chama a si mesma com acc + lista[0] e a parte restante. Assim, a resposta final já sai pronta na última chamada, sem somas pendentes para fazer na volta da recursão. Passo 3: Em linguagens que otimizam a recursão de cauda, esse padrão reutiliza o mesmo quadro de pilha, reduzindo o uso de memória de proporcional ao tamanho da lista para constante. Mesmo onde essa otimização não existe, o padrão deixa o código mais claro e evita o acúmulo de operações pendentes. Passo 4: Por que as outras estão erradas: A) usar variável global não muda a estrutura recursiva e torna o código mais frágil; B) a condição de parada já existe na função dada (se a lista estiver vazia, retorna 0), então adicioná-la não é uma otimização; C) converter a lista em vetor não reduz o número de chamadas recursivas nem o custo de cada uma; D) duplicar as chamadas recursivas aumenta o trabalho e tornaria o cálculo mais lento, não mais rápido. Passo 5: Portanto, a alternativa E é a melhor resposta, coincidindo com o gabarito oficial.

💡 Dica: Compare a recursão que cria novas etapas com uma versão que mantém o resultado parcial em um acumulador.

Alternativa por alternativa

A Erradaerro: Conceitual

Acredita que guardar a soma em uma variável compartilhada resolve o problema da recursão, sem perceber que o acúmulo deve ser passado por parâmetro para que cada chamada tenha seu próprio estado.

B Erradaerro: Interpretaçãoa que mais engana

Não percebeu que a função já possui condição de parada (se a lista estiver vazia, retorna 0) e supôs que ela estivesse faltando, confundindo condição de parada com otimização.

Por que engana: Confundir otimização com a inclusão de uma condição de parada, embora ela já esteja presente, ou supor que transformar a lista em vetor reduz o custo recursivo.

C Erradaerro: Conceitual

Imagina que trocar a estrutura de dados muda a complexidade do algoritmo, quando o número de chamadas recursivas e o trabalho por chamada continuam os mesmos.

D Erradaerro: Conceitual

Pensa que mais chamadas recursivas aceleram o cálculo, quando na verdade duplicá-las gera trabalho redundante e crescimento exponencial de chamadas.

E Correta

A função já tem uma condição de parada. Uma função acumuladora guarda a soma parcial a cada chamada, evitando que as somas fiquem pendentes até o fim da recursão.

Raio-X da questão

Dificuldade Média
Bloom Aplicar
Leitura baixo
Discriminação medio
Peso pedagógico medio
Autonomia do enunciado completo
Cobertura da habilidade unica
🧪 Simulado🩺 Diagnóstico🧮 Exige cálculo🏠 Cotidiano🔗 Interdisciplinar⭐ Representativa✍️ interpretativa🧩 progressao
🎯 Conceito central

Recursão com acumulador

📌 Objetivo

avaliacao

🧱 Pré-requisitos

Funções e parâmetros · Recursão e condição de parada

📚 Reveja

Revise recursão, condição de parada e acumuladores para otimizar chamadas e uso de memória.

⚠️ Erro mais comum

Confundir otimização com a inclusão de uma condição de parada, embora ela já esteja presente, ou supor que transformar a lista em vetor reduz o custo recursivo.

🌎 Tema transversal

ciencia_tecnologia

🤝 Socioemocional

tomada_decisao

🏫 Contexto

abstrato

Questões parecidas com resolução

Todas as questões de [CONFERIR] Construir soluções baseadas no uso de algoritmos e conceitos da Computação para resolver problemas, avaliando suas qualidades e melhorando-as.

🔎 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

Ocorreu um erro inesperado. Recarregar X

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.