— O painel do mutirão de conserto do centro comunitário está “escondendo” trabalho — reclamou a coordenadora…
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
— O painel do mutirão de conserto do centro comunitário está “escondendo” trabalho — reclamou a coordenadora ao ver o relatório do aplicativo. No app, cada serviço pode ser dividido em subtarefas. Por exemplo, “Revisar som do auditório” pode virar “trocar cabos” e “testar caixas”; e “testar caixas” ainda pode virar “testar esquerda” e “testar direita”. Ou seja, uma tarefa pode ter uma lista de subtarefas, e cada subtarefa pode ter outras, sem limite de níveis. O relatório precisa mostrar quantas tarefas serão executadas no total, contando a tarefa principal e todas as subtarefas em qualquer profundidade. A equipe percebeu que contar “só dois níveis” funciona em alguns casos, mas falha quando alguém detalha mais o serviço. Por isso, decidiram automatizar a contagem com uma função recursiva. Analise a necessidade descrita e identifique o algoritmo em pseudocódigo que calcula corretamente o total de tarefas, contando a própria tarefa e todas as subtarefas, independentemente da profundidade.
- A) contar(t): se filhos(t) vazio retorne 0; s=0; para f em filhos(t) s=s+contar(f); retorne s
- B) contar(t): s=1; para f em filhos(t) s=s+1; retorne s
- C) contar(t): se filhos(t) vazio retorne 1; retorne 1+contar(t)
- D) contar(t): se filhos(t) vazio retorne 1; s=1; para f em filhos(t) s=s+contar(f); retorne s
- E) contar(t): se filhos(t) nao vazio retorne 1; s=1; para f em filhos(t) s=s+contar(f); retorne s
✅ Resposta correta: alternativa D
Resolução passo a passo
- O objetivo é contar a própria tarefa mais todas as subtarefas em qualquer profundidade, então a função precisa ser recursiva e somar 1 por cada tarefa visitada.
- Caso base: se a tarefa não tem filhos, ela é uma folha e conta apenas 1 (ela mesma). Isso é o que a alternativa D faz com 'se filhos(t) vazio retorne 1'.
- Caso geral: se a tarefa tem filhos, começa com s=1 (a própria tarefa) e soma, para cada subtarefa f, o total de tarefas de f obtido pela própria chamada recursiva contar(f). Assim, cada nível é contado uma vez, por qualquer profundidade.
- Verificando o exemplo: 'Revisar som' (1) + 'trocar cabos' (1) + 'testar caixas' (1) + 'testar esquerda' (1) + 'testar direita' (1) = 5 tarefas. A alternativa D retorna 5.
- Por que as outras estão erradas: A retorna 0 para folhas e não conta a própria tarefa quando tem filhos, subcontando; B não é recursiva, então só conta os filhos diretos e ignora os netos; C não tem caso base que funcione para nós com filhos, pois chama contar(t) sobre o mesmo nó, gerando recursão infinita; E, ao retornar 1 imediatamente para qualquer tarefa com filhos, ignora todas as subtarefas.
- Conclusão: o gabarito oficial D está correto, pois é a única opção que combina caso base correto, contagem da própria tarefa e soma recursiva das subtarefas.
💡 Dica: Identifique a estrutura recursiva para contar todas as subtarefas em qualquer profundidade.
Alternativa por alternativa
O aluno acha que uma tarefa sem subtarefas vale 0 e que a tarefa principal não precisa ser contada, somando apenas as contagens das subtarefas.
O aluno pensa que basta contar as subtarefas diretas, achando que o 'sem limite de níveis' do enunciado não exige recursão.
O aluno entende que a função deve retornar 1 mais o resultado de contar, mas não percebe que chama a mesma tarefa t sem reduzir o problema, o que gera recursão infinita.
Define caso-base (folha) e soma 1 com as contagens recursivas de cada subtarefa, cobrindo qualquer profundidade.
O aluno inverte a condição do caso base, retornando 1 para tarefas que têm subtarefas e sem percorrer os filhos, como se a existência de filhos encerrasse a contagem.
Raio-X da questão
recursao em algoritmos
diagnostico
estrutura de dados hierarquica · conceito de funcao recursiva
Estude recursão e estruturas de dados hierárquicas.
O aluno pode contar apenas dois níveis de subtarefas, ignorando níveis mais profundos, ou não incluir a tarefa principal na contagem.
ciencia_tecnologia
pensamento_critico
cotidiano
Questões parecidas com resolução
- — Para evitar desperdício de papel, o robô deve seguir sempre a mesma ordem — explicou a monitora da mostra de ciências…
- Projete um algoritmo em pseudocódigo que, dada uma árvore enraizada representada por nós com referências a filhos e uma…
- Escreva um algoritmo em pseudocódigo que utilize recursão para calcular a soma de uma lista de números.
- Projete um algoritmo generalizado que receba várias instâncias de planejamento de tarefas domésticas (cada instância…
- — Achei que era so contar as pastas, mas cada pasta tem outras dentro — reclamou uma voluntaria ao organizar o acervo…
- Descreva com precisão o algoritmo e as estruturas de dados (registros, grafo, pilha/fila) para um programa que gerencie…
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
