— 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
- Em uma estufa, um programa analisa a umidade de cinco canteiros, na ordem indicada, e aciona a irrigação quando a…
- Na feira cultural da escola, um grupo criou uma lista com as músicas que tocarão no palco: abertura, apresentação de…
- Na horta da escola, foram registradas as umidades do solo em uma lista: [42, 37, 35]. Uma função recursiva verifica se…
- Uma banca de feira registra em uma lista o preço de cada cesta vendida durante a manhã. Para calcular o total…
- Pesquisadores acompanham a qualidade da água em estações de um rio e precisam automatizar a leitura dos sensores. No…
- Por que uma lâmpada apagada pode continuar sem reparo por vários dias? Na central de atendimento de um município…
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
