GeraProva GeraProva Provas com IA para professores do Brasil
Computação9º anoBNCC EF69CO02Média⏱ medio

Em uma atividade de análise de algoritmos, uma turma usa a função recursiva count_occurrences(L, x) para…

Publicado por Alexandre Lombardi dos Santos, fundador do GeraProva

Habilidade BNCC EF69CO02

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 análise de algoritmos, uma turma usa a função recursiva count_occurrences(L, x) para contar quantas vezes o valor x aparece em uma lista L. A função é definida assim: se L estiver vazia, retorna 0; caso contrário, verifica se L[0] é igual a x e soma 1 ou 0 ao resultado de count_occurrences(L[1:], x). Considere que L[1:] cria uma nova lista, copiando todos os elementos a partir da segunda posição, que essa cópia leva tempo proporcional ao número de elementos copiados e que as demais operações realizadas em cada chamada levam tempo constante. Seja n o tamanho inicial de L. Com base nessas informações, qual é a complexidade temporal, em função de n, da execução de count_occurrences(L, x) no pior caso?

  1. A) O(log n) — logarítmica no tamanho inicial da lista.
  2. B) O(1) — constante no tamanho inicial da lista.
  3. C) O(n log n) — quase linear no tamanho inicial da lista.
  4. D) O(n²) — quadrática no tamanho inicial da lista.
  5. E) O(n³) — cúbica no tamanho inicial da lista.

✅ Resposta correta: alternativa D

Resolução passo a passo

  1. Identifique o custo de uma única chamada. Em cada chamada, a função faz operações de tempo constante (verificar se a lista está vazia, comparar L[0] com x e somar 0 ou 1), mas também executa L[1:], que copia todos os elementos restantes da lista. Se a lista atual tem k elementos, essa cópia custa proporcional a k - 1. Passo 2: Acompanhe a sequência de chamadas. A primeira chamada recebe n elementos e copia n - 1. A segunda recebe n - 1 elementos e copia n - 2. Isso continua até a lista ficar vazia. Passo 3: Some os custos das cópias. O total é (n - 1) + (n - 2) + ... + 1 + 0 = n(n - 1)/2, que é igual a (n^2 - n)/2. Passo 4: Simplifique. Descartando o termo de menor grau e a constante 1/2, o custo total cresce com n^2, logo a complexidade no pior caso é O(n^2). O pior caso ocorre quando x não aparece na lista ou aparece só no final, pois a recursão percorre todos os elementos de qualquer forma. Passo 5: Compare com as alternativas. A alternativa A está errada, pois não há divisão do problema pela metade como na busca binária. A alternativa B está errada, pois ignora o custo linear de cada cópia. A alternativa C está errada, pois n log n corresponde a algoritmos como o mergesort, que não é o padrão desta recursão. A alternativa E está errada, pois não existe um terceiro nível de trabalho que multiplique as cópias; o custo total é uma soma de termos lineares, não um produto. O gabarito oficial D está correto.

💡 Dica: Analise a estrutura do algoritmo e a relação com o tamanho da lista.

Alternativa por alternativa

A Erradaerro: Conceituala que mais engana

Acredita que a recursão reduz o problema pela metade a cada passo, como na busca binária, e por isso associa a complexidade a log n. Aqui cada chamada remove apenas um elemento.

Por que engana: Confundir a complexidade do algoritmo, acreditando que a recursão gera um aumento quadrático no tempo de execução.

B Erradaerro: Procedimental

Considera que cada chamada é uma operação de tempo constante e ignora que L[1:] copia a lista inteira. O enunciado diz explicitamente que essa cópia custa tempo proporcional ao número de elementos.

C Erradaerro: Conceitual

Associa a recursão que divide e combina a algoritmos como mergesort e supõe um custo n log n. Essa função não divide a lista ao meio; ela descarta um elemento por vez.

D Correta

A função realiza aproximadamente n chamadas recursivas. Na chamada que recebe uma lista de tamanho k, a operação L[1:] copia k − 1 elementos e, portanto, custa O(k). O custo total é proporcional a (n − 1) + (n − 2) + ... + 1, cuja soma é n(n − 1)/2. Assim, a complexidade temporal é O(n²).

E Erradaerro: Procedimental

Imagina que o custo de cada nível se multiplica pelos demais e que há três fatores de custo quadrático ou linear encadeados. Na realidade, os custos das cópias se somam, formando uma soma de termos lineares.

Raio-X da questão

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

complexidade de algoritmos

📌 Objetivo

avaliacao

🧱 Pré-requisitos

análise de algoritmos · recursão

📚 Reveja

Revisar conceitos de complexidade temporal de algoritmos recursivos.

⚠️ Erro mais comum

Confundir a complexidade do algoritmo, acreditando que a recursão gera um aumento quadrático no tempo de execução.

🌎 Tema transversal

ciencia_tecnologia

🤝 Socioemocional

pensamento_critico

🏫 Contexto

abstrato

Questões parecidas com resolução

Todas as questões de Programação - Linguagem de programação

🔎 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.