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
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?
- A) Usar uma variável global
- B) Adicionar uma condição de parada
- C) Transformar a lista em um vetor
- D) Duplicar as chamadas recursivas
- E) Usar uma função acumuladora
✅ Resposta correta: alternativa E
Resolução passo a passo
- 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
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.
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.
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.
Pensa que mais chamadas recursivas aceleram o cálculo, quando na verdade duplicá-las gera trabalho redundante e crescimento exponencial de chamadas.
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
Recursão com acumulador
avaliacao
Funções e parâmetros · Recursão e condição de parada
Revise recursão, condição de parada e acumuladores para otimizar chamadas e uso de memória.
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.
ciencia_tecnologia
tomada_decisao
abstrato
Questões parecidas com resolução
- Ao criar uma função que utiliza recursão para somar todos os elementos de uma lista, qual é a base dessa função?
- Descreva como você poderia utilizar uma função recursiva para somar todos os elementos de uma lista de números inteiros.
- Um programador deseja criar uma função recursiva que retorne a soma dos elementos de uma lista. Como deve ser a…
- Desenvolva uma função recursiva que calcule a soma dos números em uma lista. Explique o funcionamento da função.
- Explique como a recursão pode ser utilizada para resolver o problema de soma de elementos em uma lista.
- Uma função recursiva soma(lista): se lista vazia retorna 0; senão retorna primeiro + soma(resto). Aplicando essa…
🔎 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
