— Achou a gravação de 1998? — perguntou a técnica da rádio comunitária, enquanto organizava o acervo no…
Publicado por Alexandre Lombardi dos Santos, fundador do GeraProva
Construir soluções de problemas usando a técnica de recursão e automatizar tais soluções usando uma linguagem de programação.
Fonte: Base Nacional Comum Curricular (MEC).Questão
— Achou a gravação de 1998? — perguntou a técnica da rádio comunitária, enquanto organizava o acervo no computador. O estagiário explicou que os áudios estão guardados em pastas e subpastas: na pasta “Raiz” há o arquivo “abertura.mp3” (3 min) e a pasta “Entrevistas”, que contém o arquivo “saude.wav” (5 min) e a pasta “Festas”, com “junina.mp3” (2 min) e “aniversario.mp3” (4 min). Ele tentou somar as durações com um laço, mas percebeu que só funcionava no primeiro nível e esquecia os arquivos que estavam mais “fundos”. Para automatizar a soma em qualquer profundidade, ele escreveu a função abaixo, mas deixou uma lacuna: func somaDuracao(pasta): total = 0 para cada item em pasta: se item é arquivo: total = total + item.duracao se item é pasta: total = total + ??? retorna total Analise a função do texto e identifique a substituição de ??? que permite somar a duração total dos áudios, mesmo quando há subpastas dentro de subpastas.
- A) somaDuracao(Raiz)
- B) total = somaDuracao(item)
- C) somaDuracao(pasta)
- D) somaDuracao(item)
- E) item.duracao
✅ Resposta correta: alternativa D
Resolução passo a passo
- A função percorre os itens de uma pasta. Se o item é arquivo, soma sua duração diretamente. Se o item é pasta, a duração total dessa subpasta ainda não é conhecida, pois ela contém outros arquivos e pastas, possivelmente em vários níveis. Passo 2: A solução é usar a própria função para calcular o total da subpasta. Isso é recursão: a função se chama com um dado menor (a subpasta), e a cada nível a soma fica mais profunda, até chegar a pastas que contêm somente arquivos. Passo 3: Portanto, a substituição correta é somaDuracao(item), alternativa D. Ela recebe a subpasta atual (item) e devolve a soma de todos os áudios dentro dela, em qualquer profundidade, que é somada ao total. Passo 4: Verificando com o exemplo: somaDuracao(Raiz) soma abertura.mp3 (3) e, ao chegar em Entrevistas, chama somaDuracao(Entrevistas), que soma saude.wav (5) e chama somaDuracao(Festas), obtendo 2 + 4 = 6. O total é 3 + 5 + 6 = 14 minutos. Passo 5: Por que as outras estão erradas: A) somaDuracao(Raiz) chama a função sobre a pasta raiz, o que reinicia o cálculo do início e gera recursão infinita. B) total = somaDuracao(item) é uma atribuição, não uma expressão que devolve valor para somar, e sobrescreveria o total acumulado. C) somaDuracao(pasta) repete a chamada sobre a mesma pasta, gerando recursão infinita sem descer nos níveis. E) item.duracao só serve para arquivos; pastas não têm duração própria a ser somada, então isso ignora as subpastas.
💡 Dica: Entenda a recursividade para somar durações em subpastas.
Alternativa por alternativa
Acredita que basta chamar a função novamente sobre a pasta raiz para acumular os valores das subpastas. Não percebe que isso reinicia o cálculo sobre o mesmo ponto e não desce para o item atual.
Entende que a chamada recursiva deve ser atribuída a total, sem perceber que isso substitui o acumulado em vez de somá-lo ao total. A soma com o valor anterior se perde.
Por que engana: Confundir chamada recursiva com soma direta, não aplicando recursão para subpastas.
Acredita que chamar a função com a própria pasta atual resolve o problema. Isso faz a função processar a mesma pasta indefinidamente, sem avançar para as subpastas.
Chama a própria função para a subpasta e acumula o retorno, percorrendo todos os níveis (recursão com redução do problema).
Supõe que item.duracao funciona para qualquer item, inclusive pastas, e não percebe que a pasta não possui uma duração já calculada. Assim, as subpastas e seus arquivos são ignorados.
Raio-X da questão
recursividade em funções
avaliacao
funções e estruturas de dados · controle de fluxo e laços
Estude funções recursivas e estruturas de dados em árvore.
Confundir chamada recursiva com soma direta, não aplicando recursão para subpastas.
ciencia_tecnologia
pensamento_critico
cotidiano
Questões parecidas com resolução
- — O som não sumiu quando a internet caiu! — observou Caio, após gravar entrevistas para um programa de rádio do bairro…
- — Lucas, por que as músicas do seu arquivo tocam sem ordem? — Estou com cerca de duzentos arquivos de áudio espalhados…
- — Preciso achar a vinheta de 8 segundos antes do intervalo! — disse a técnica de som de uma rádio comunitária, olhando…
- — Se eu contar uma história sobre a praça, ela vai aparecer no mapa? — perguntou Caio durante a montagem de uma mostra…
- — Se a gente errar a ordem, o aplicativo toca tudo diferente — disse Davi, ensaiando no centro cultural do bairro. Para…
- — Achei que era so contar as pastas, mas cada pasta tem outras dentro — reclamou uma voluntaria ao organizar o acervo…
Todas as questões de Programação - Programação com listas e recursã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
