Uma banca de feira registra em uma lista o preço de cada cesta vendida durante a manhã. Para calcular o total…
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
Uma banca de feira registra em uma lista o preço de cada cesta vendida durante a manhã. Para calcular o total arrecadado, foi criada a função abaixo, ainda incompleta. funcao somar(vendas, posicao) se __________ retorne __________ fim_se retorne vendas[posicao] + somar(vendas, posicao + 1) fim_funcao A primeira chamada é somar(vendas, 0). Qual preenchimento faz a função somar todos os valores da lista usando recursão, sem tentar acessar uma posição inexistente?
- A) posicao = tamanho(vendas); retornar vendas[posicao]
- B) posicao = tamanho(vendas) - 1; retornar 0
- C) posicao = 0; retornar tamanho(vendas) + 1
- D) posicao = tamanho(vendas); retornar 1
- E) posicao = tamanho(vendas); retornar 0
✅ Resposta correta: alternativa E
Resolução passo a passo
- a função percorre a lista posição por posição, somando vendas[posicao] com o resultado da chamada seguinte. Para não acessar uma posição inexistente, a recursão precisa de um caso base que pare exatamente quando a lista acaba. Passo 2: a última posição válida é tamanho(vendas) - 1, então quando posicao chega a tamanho(vendas) não há mais valores a somar. Passo 3: na condição do se, deve-se colocar posicao = tamanho(vendas), que é o momento em que a lista termina. Passo 4: nesse caso base, retorne 0, pois não há mais nada a acumular e o elemento inexistente não é acessado. Passo 5: por que as outras estão erradas. Na A, retornar vendas[posicao] com posicao igual ao tamanho acessa uma posição inexistente. Na B, a condição posicao = tamanho - 1 interrompe a recursão antes do último elemento, que fica fora da soma. Na C, posicao = 0 dispara já na primeira chamada e retorna tamanho + 1, que não é a soma dos valores. Na D, retornar 1 faz cada passo somar 1 em vez do preço da cesta, contando itens em vez de somar valores. Passo 6: portanto a alternativa E é a única que completa a função corretamente, e coincide com o gabarito oficial.
💡 Dica: A recursão deve parar quando a posição atingir o tamanho da lista, retornando zero.
Alternativa por alternativa
Acredita que o caso base deve ser disparado quando posicao já alcança o tamanho e que é válido acessar vendas[tamanho], além de retornar esse valor como caso final.
Confunde o índice do último elemento com o ponto de parada da recursão, o que faz o último valor da lista ser ignorado na soma.
Acha que a condição de parada deve ser testada na posição inicial (zero) e que o retorno deve ser o tamanho da lista somado a 1, sem relação com a soma dos preços.
Acredita que o valor do caso base pode ser qualquer elemento neutro de contagem, como 1, e não percebe que a soma precisa usar o elemento neutro da adição, que é 0.
Ao alcançar o fim da lista, a função retorna 0 e as chamadas anteriores somam os valores já acessados.
Raio-X da questão
Caso-base em recursão
Identificar a condiç
Índices e tamanho de listas · Soma e valor neutro zero
Recursão sobre listas
Usar a última posição como caso-base e tentar acessar novamente um elemento inexistente.
Persistência na análise passo a passo
Exemplo cotidiano si
Questões parecidas com resolução
- Ao criar uma função que utiliza recursão para somar todos os elementos de uma lista, qual é a base dessa função?
- Uma função recursiva soma(lista): se lista vazia retorna 0; senão retorna primeiro + soma(resto). Aplicando essa…
- Escreva um algoritmo em pseudocódigo que utilize recursão para calcular a soma de uma lista de números.
- Um programador deseja criar uma função recursiva que retorne a soma dos elementos de uma lista. Como deve ser a…
- A função abaixo soma uma lista dividindo o problema em uma parte menor a cada chamada: função somar(lista): se lista…
- Analise o pseudocódigo abaixo que processa uma lista L e uma variável acumuladora acc. A chamada inicial é somar(L,0). A…
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
