— Os relatos gravados pelos moradores estão distribuídos em muitas pastas — observou a responsável pelo acervo…
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
— Os relatos gravados pelos moradores estão distribuídos em muitas pastas — observou a responsável pelo acervo digital de um centro cultural. Algumas pastas guardam arquivos de áudio, enquanto outras contêm novas pastas, formando níveis diferentes de organização. Para reunir os nomes de todos os arquivos, foi criado o procedimento em uma linguagem de programação: def catalogar(pasta): exibir_arquivos(pasta) if CONDICAO: return for subpasta in pasta.subpastas: catalogar(subpasta) O procedimento deve mostrar os arquivos da pasta recebida e continuar a busca em cada pasta interna, sem deixar de registrar conteúdos que estejam em níveis mais profundos. Analise o procedimento e identifique a condição que representa o caso-base para encerrar cada ramo da busca sem impedir o registro dos arquivos.
- A) Definir o caso-base após visitar apenas a primeira subpasta.
- B) Definir o caso-base ao retornar somente à pasta inicial.
- C) Definir o caso-base quando a pasta atual tiver ao menos um arquivo.
- D) Definir o caso-base antes de exibir os arquivos da pasta atual.
- E) Definir o caso-base quando a pasta atual não tiver subpastas.
✅ Resposta correta: alternativa E
Resolução passo a passo
- Analisamos o procedimento catalogar(pasta). Primeiro ele chama exibir_arquivos(pasta), que mostra os arquivos da pasta atual. Depois testa a CONDICAO e, se ela for verdadeira, executa return e encerra aquele ramo. Caso contrário, percorre as subpastas e chama catalogar para cada uma.
- Para o procedimento cumprir o enunciado, a condição de parada precisa ocorrer somente quando não há mais nada a explorar abaixo da pasta atual. Isso acontece quando a pasta atual não tem subpastas, ou seja, quando pasta.subpastas está vazia. Nesse caso o laço for não tem o que percorrer e o ramo termina naturalmente, depois de os arquivos já terem sido exibidos.
- Assim, a CONDICAO correta é verificar se a pasta não possui subpastas (por exemplo, not pasta.subpastas ou len(pasta.subpastas) == 0). Com ela, a busca desce em todos os níveis e registra os arquivos de cada pasta antes de parar.
- Por que as outras estão erradas: A) parar após a primeira subpasta faria a busca ignorar as demais pastas do mesmo nível. B) retornar só à pasta inicial não define o término de cada ramo, pois a parada deve ocorrer em cada nível. C) a presença de arquivos não indica fim da busca, já que pastas com arquivos podem ter subpastas com mais conteúdo. D) parar antes de exibir os arquivos impediria o registro dos conteúdos da própria pasta.
- O gabarito oficial E está correto, e esta resolução coincide com ele.
💡 Dica: Identifique o caso-base que interrompe a recursão sem perder arquivos.
Alternativa por alternativa
Imagina que a recursão deve parar após a primeira subpasta, como se o laço for fosse interrompido logo na primeira iteração. Com isso, as demais subpastas do mesmo nível ficariam sem busca.
Confunde o retorno de uma chamada recursiva com o fim de toda a busca, achando que o caso-base só serve para voltar à pasta inicial. Não percebe que a parada precisa valer para cada ramo.
Associa o caso-base à existência de arquivos, achando que a busca deve parar quando a pasta tem conteúdo de áudio. Isso ignora que uma pasta com arquivos ainda pode conter subpastas com outros arquivos.
Coloca a verificação de parada antes do exibir_arquivos, pensando que o return apenas impede o processamento da pasta. Com isso, os arquivos da pasta atual deixam de ser registrados.
A ausência de subpastas impede novas chamadas. Como os arquivos já foram exibidos, a condição encerra corretamente aquele ramo da busca.
Raio-X da questão
recursao e caso-base
diagnostico
conceito de funcao recursiva · estrutura de dados em arvore
Estude recursao e identificacao de caso-base em funcoes.
Confundir o caso-base, interrompendo a busca prematuramente ou nao encerrando a recursao.
ciencia_tecnologia
pensamento_critico
cotidiano
Questões parecidas com resolução
- Pesquisadores acompanham há três anos o avanço de resíduos flutuantes em um trecho de rio urbano. Em uma simulação para…
- Pesquisadores acompanham tartarugas marinhas e registram, em tablets, os locais de desova antes de enviar os arquivos a…
- Pesquisadores acompanham a catalogação digital de objetos de um centro cultural. Para reduzir registros duplicados, o…
- Pesquisadores acompanham a qualidade da água em estações de um rio e precisam automatizar a leitura dos sensores. No…
- — O kit 47 já foi devolvido? — perguntou a técnica responsável pela campanha itinerante de vacinação. Antes do uso de…
- — Este terminal vai ajudar a devolver os livros sem formar fila — explicou a bibliotecária. Ao receber um livro, o…
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
