Pular para o conteúdo principal

Questão de Programação — R — FGV 2023

ProgramaçãoR
Código
fg070755
Banca
FGV
Órgão
SMPOG de Belo Horizonte - MG
Ano
2023
Nível
Superior
Cargo
Analista de Planejamento e Gestão Governamental: Ciência da Computação
Analise o código R a seguir.xpto <- function(k) {if (k > 0) {a <- k + xpto(k - 2)print(a)} else {a = 0return(a)}}xpto(7)Assinale o conjunto completo de valores exibidos na execução desse código, na ordem em que foram gerados.
  1. A1 4 9
  2. B1 4 9 16
  3. C9 4 1
  4. D16 9 4 1
Revelar gabarito e comentário

GabaritoB — 1 4 9 16

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Função recursiva em R – ordem de impressão

Gabarito: letra B. A função xpto é recursiva e imprime os valores da soma na ordem inversa das chamadas (UEPS). Após chamadas sucessivas, os valores impressos são: 1, 4, 9, 16.

A banca testa o entendimento de recursão e da pilha de execução. Em R, quando uma função recursiva print o resultado após a chamada recursiva, a saída ocorre do caso base para o topo – ou seja, o primeiro valor impresso é o resultado da chamada mais profunda.

Execução passo a passo

  1. xpto(7)k=7 > 0: a = 7 + xpto(5) (aguarda retorno)

  2. xpto(5)k=5 > 0: a = 5 + xpto(3)

  3. xpto(3)k=3 > 0: a = 3 + xpto(1)

  4. xpto(1)k=1 > 0: a = 1 + xpto(-1)

  5. xpto(-1)k=-1 <= 0: retorna 0 (sem print)

Agora os retornos desempilham:

  • Em xpto(1): a = 1 + 0 = 1print(1)

  • Em xpto(3): a = 3 + 1 = 4print(4)

  • Em xpto(5): a = 5 + 4 = 9print(9)

  • Em xpto(7): a = 7 + 9 = 16print(16)

  1. 1xpto(-1) retorna 0
  2. 2xpto(1): 1+0 → print(1)
  3. 3xpto(3): 3+1 → print(4)
  4. 4xpto(5): 5+4 → print(9)
  5. 5xpto(7): 7+9 → print(16)
LEVEL · soulevel.com.br

Alternativas

Alternativa A — ❌ Incorreta

Lista apenas 1, 4, 9 – falta o 16. O erro é interromper a sequência antes da última chamada.

Alternativa B — ✅ Correta ⟵ GABARITO

Exibe os quatro valores na ordem correta: 1, 4, 9, 16.

Alternativa C — ❌ Incorreta

Apresenta ordem invertida (9, 4, 1) e incompleta (falta 16). Confunde a ordem de desempilhamento.

Alternativa D — ❌ Incorreta

Mostra ordem reversa completa (16, 9, 4, 1). Embora todos os números apareçam, a ordem está errada – o primeiro a ser impresso é 1, não 16.

PEGA ESSA DICA!

Em recursão com print após a chamada, a saída segue a ordem do caso base para a chamada original (LIFO – Last In, First Out). Simule com papel ou use browser() para depurar.

Gabarito: letra B.

Link permanente: /questoes/fg070755