← Questões de Programação

Programação · FGV · 2023

Questão comentada de Programação

Analise o código R a seguir. xpto <- function(k) { if (k > 0) { a <- k + xpto(k - 2) print(a) } else { a = 0 return(a) } } xpto(7) Assinale o conjunto completo de valores exibidos na execução desse código, na ordem em que foram gerados.

Gabarito: B

Este código em R usa recursão, ou seja, a função chama a si mesma até chegar ao caso base. Aqui, o caso base é quando k <= 0, momento em que a função devolve 0 e para de descer. Depois disso, os valores começam a voltar da pilha de chamadas, e é nessa volta que o print(a) acontece.\n\nPara xpto(7), a sequência de chamadas vai até xpto(-1). Na volta, os cálculos ficam assim: xpto(1) imprime 1, xpto(3) imprime 4, xpto(5) imprime 9 e xpto(7) imprime 16. Repare no padrão: cada nível soma o valor de k ao resultado retornado pelo nível anterior.\n\nPor isso, os valores exibidos aparecem em ordem crescente de profundidade da recursão de retorno: 1, 4, 9, 16. O gabarito B está correto porque reúne exatamente todos os valores impressos, na ordem em que surgem no console.\n\nEm R, return(a) no caso base encerra a função naquele ponto, e print(a) nas chamadas superiores é executado apenas quando a recursão está desfazendo a pilha. É aquele clássico truque de prova: a execução desce primeiro, mas a impressão acontece na subida.

Continue treinando

Questões relacionadas