soma = 0 função a(x): soma = 0 se (x <= 1) então retorne 1 fim se soma = soma + x + a(x - 1) + a(x - 2) retorne soma escreva(a(3)) Assinale a opção que apresenta o resultado correto para o pseudocódigo precedente.
- A)17
Errada, porque 17 nao corresponde a expansao correta da recursao a(3).
- B)1
Errada, pois a funcao nao retorna 1 para x = 3, apenas quando x <= 1.
- C)4
Errada, porque a(3) nao vale 4; esse valor aparece em a(2).
- D)8
Certa, pois a(3) = 3 + a(2) + a(1) = 3 + 4 + 1 = 8.
- E)13
Errada, pois 13 nao e o resultado obtido ao aplicar a regra recursiva do enunciado.
Gabarito: D
Aqui a ideia central e ler a funcao como uma recursao simples: ela para quando x <= 1 e, nesses casos, devolve 1. Quando x e maior que 1, ela soma o proprio x com dois chamados recursivos: a(x - 1) e a(x - 2). Ou seja, o valor cresce como uma mistura de soma e recursao, bem no estilo "cada chamada puxa duas outras". Vamos calcular sem drama. a(1) = 1 e a(0) = 1, porque a condicao de parada vale para ambos. Depois, a(2) = 2 + a(1) + a(0) = 2 + 1 + 1 = 4. Por fim, a(3) = 3 + a(2) + a(1) = 3 + 4 + 1 = 8. Portanto, ao executar escreva(a(3)), o resultado impresso e 8. O gabarito D esta correto porque segue exatamente a expansao recursiva do pseudocodigo, sem nenhuma pegadinha extra de variavel global ou acumulacao externa, apesar do nome "soma" aparecer duas vezes. Em questoes de CESPE/CEBRASPE, e comum a banca cobrar atencao ao caso base e ao valor de cada chamada recursiva. Se voce monta a arvore de chamadas com calma, o resultado aparece rapidinho, sem precisar adivinhar.