GeraProva GeraProva Provas com IA para professores do Brasil
Computação6º anoBNCC EF06CO02Difícil⏱ longo

Projete um algoritmo recursivo em pseudocódigo que, dada uma lista de registros 'alunos' onde cada registro…

Publicado por Alexandre Lombardi dos Santos, fundador do GeraProva

Habilidade BNCC EF06CO02

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

Projete um algoritmo recursivo em pseudocódigo que, dada uma lista de registros 'alunos' onde cada registro tem campos (nome, notas) e 'notas' é uma lista de inteiros, calcule a média geral da turma. No seu texto, explique (1) como a recursão percorre a lista de registros e, se desejar, a lista de notas; (2) qual estrutura de dados você escolheu para representar cada aluno e por que; (3) como tratar o caso de lista vazia e entradas sem notas; e (4) a complexidade temporal do algoritmo.

✍️ Questão dissertativa: veja abaixo a resposta esperada e a explicação.

Resposta esperada

Resposta modelo (pseudocódigo e justificativa): // Função auxiliar: soma recursiva de uma lista de inteiros fun soma_notas(notas): se notas == [] então retorne 0 senão retorne notas[0] + soma_notas(notas[1:]) // Função principal: retorna par (soma_total, quantidade_total) fun acumula_alunos(alunos): se alunos == [] então retorne (0, 0) // soma 0, quantidade 0 senão aluno = alunos[0] // registro com aluno.nome e aluno.notas (lista) soma_atual = soma_notas(aluno.notas) qtd_atual = tamanho(aluno.notas) (soma_rest, qtd_rest) = acumula_alunos(alunos[1:]) retorne (soma_atual + soma_rest, qtd_atual + qtd_rest) // Função que usa o acumulador para obter a média fun media_turma(alunos): (soma_total, qtd_total) = acumula_alunos(alunos) se qtd_total == 0 então retorne 0 // ou apropriado: "sem notas" senão retorne soma_total / qtd_total Justificativa e explicação: - Estrutura de dados: cada aluno é um registro (registro.nome, registro.notas) porque agrupa campos heterogêneos e permite acessar facilmente a lista de notas. Usar uma lista de registros facilita percorrer sequencialmente os alunos. - Recursão: a função acumula_alunos usa recursão sobre a lista de registros (cada chamada processa o primeiro registro e combina com o resultado recursivo do resto). soma_notas demonstra recursão aninhada para somar as notas de um único aluno; alternativamente pode-se somar iterativamente para reduzir profundidade de pilha. - Casos de borda: lista vazia devolve (0,0). Se algum registro tiver notas vazias, soma_atual será 0 e qtd_atual 0, então não afeta a média. Evitar divisão por zero testando qtd_total==0. - Complexidade: seja N o total de notas em toda a turma. soma_notas visita cada nota uma vez e acumula_alunos visita cada aluno; no total todas as notas são somadas uma vez, portanto tempo O(N). A profundidade máxima de recursão é O(A + M) dependendo se soma_notas é chamada recursivamente por aluno (A = número de alunos, M = máximo de notas por aluno); para reduzir profundidade, pode-se implementar soma_notas de forma iterativa ou usar tail recursion/um acumulador. - Observações práticas: escolher nomes de variáveis claros (alunos, aluno, notas, soma_total), validar entradas e, em linguagens sem otimização de tail recursion, preferir versão iterativa se listas muito longas para evitar estouro de pilha.

Explicação

A solução apresentada utiliza recursão de forma eficiente para percorrer tanto a lista de alunos quanto a lista de notas, garantindo que cada elemento seja processado uma única vez. A escolha de registros para representar alunos permite uma estrutura clara e acessível, facilitando a manipulação dos dados. Além disso, a abordagem lida adequadamente com casos de borda, como listas vazias e alunos sem notas, e a análise de complexidade temporal demonstra que o algoritmo é escalável e eficiente.

Raio-X da questão

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

algoritmo recursivo

📌 Objetivo

avaliacao

🧱 Pré-requisitos

estrutura de dados · recursão

📚 Reveja

Revisar conceitos de recursão e estruturas de dados em programação.

⚠️ Erro mais comum

O aluno pode confundir a lógica de recursão, tentando usar um loop em vez de uma chamada recursiva para percorrer a lista de alunos.

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