Questão nº 64
Questão de Fluência em Dados · FGV Receita Federal do Brasil 2023 - Manhã (nº 64)
FGV2023Analista-Tributário da Receita Federal do BrasilFluência em Dados
Gabarito: Dver comentário ↓
Analise o código R a seguir.
```
lista <- function (param) {
if (param > -3) {
temp <- param + lista(param - 3)
print(temp)
} else {
return(0)
}
}
lista(15)
```
Assinale os valores exibidos pela execução desse código, na ordem.
- A45, 30, 18, 9, 3, 0
- B63, 45, 30, 18, 9, 3
- C0, 0, 0, 0, 0, 0
- D0, 3, 9, 18, 30, 45 (alternativa correta)
- E3, 9, 18, 30, 45, 63
Resposta comentada
Gabarito Alternativa D
Recursão é quando uma função chama a si mesma para resolver um problema, dividindo-o em partes menores até chegar a um caso simples que pode ser resolvido diretamente (o caso base).
- (A) Incorreta: Esta alternativa apresenta os valores na ordem inversa. A função
print(temp)é executada depois que a chamada recursivalista(param - 3)retorna um valor etempé calculado. Isso significa que os valores são impressos à medida que as chamadas da função "desempilham" (retornam), começando pela chamada mais profunda (mais próxima do caso base). - (B) Incorreta: Os valores calculados estão incorretos. A soma de
paramcom o resultado da chamada recursiva não resulta nesses números. - (C) Incorreta: Esta alternativa sugere que a função sempre retorna 0, o que não é verdade, pois os valores de
paramsão somados ao resultado das chamadas recursivas. - (D) Correta: A execução da função
lista(15)segue a seguinte lógica (assumindo que a função retorna o valor detempna parteifpara que a soma seja numérica, apesar de o R normalmente retornarinvisible(NULL)de umprint()):lista(-3):paramé -3.-3 > -3é FALSO. Retorna0.lista(0):paramé 0.0 > -3é VERDADEIRO.temp = 0 + lista(-3)=0 + 0=0. Imprime0. Retorna0.lista(3):paramé 3.3 > -3é VERDADEIRO.temp = 3 + lista(0)=3 + 0=3. Imprime3. Retorna3.lista(6):paramé 6.6 > -3é VERDADEIRO.temp = 6 + lista(3)=6 + 3=9. Imprime9. Retorna9.lista(9):paramé 9.9 > -3é VERDADEIRO.temp = 9 + lista(6)=9 + 9=18. Imprime18. Retorna18.lista(12):paramé 12.12 > -3é VERDADEIRO.temp = 12 + lista(9)=12 + 18=30. Imprime30. Retorna30.lista(15):paramé 15.15 > -3é VERDADEIRO.temp = 15 + lista(12)=15 + 30=45. Imprime45. Retorna45.
Os valores são impressos na ordem em que as chamadas recursivas retornam:0, 3, 9, 18, 30, 45.
- (E) Incorreta: Os valores calculados estão incorretos e a sequência não corresponde à execução da função.
Fonte: FGV Receita Federal do Brasil 2023 - Manhã Analista-Tributário da Receita Federal do Brasil (Caderno Tipo 1). Reproduzida para fins de estudo.