Questão de Programação — Linguagens de programação — CESPE / CEBRASPE 2024
Programação›Linguagens de programação
Código
ce176020
Banca
CESPE / CEBRASPE
Órgão
LNA
Ano
2024
Nível
Superior
Cargo
Tecnologista – Especialidade: Desenvolvimento e Arquitetura de Software
Assinale a opção em que é apresentado o resultado da execução do trecho de código precedente, desenvolvido em JavaScript.
A5
B10
C20
D120
EReferenceError: y is not defined
Revelar gabarito e comentário▾
GabaritoD — 120
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”.
Resolução
Gabarito: letra D — a conta chega a 120 (alternativa D).
A ideia por trás
Recursão é uma técnica em que uma função chama a si mesma para resolver um problema menor, até chegar a um caso base que interrompe as chamadas. No JavaScript, cada chamada cria um novo contexto na pilha de execução, e quando o caso base é atingido, as chamadas retornam em ordem inversa, combinando os resultados.
A função fatorial é definida por n! = n * (n-1)!, com 0! = 1! = 1. Isso significa que para calcular o fatorial de um número, multiplicamos o número pelo fatorial do número anterior, e assim por diante, até chegar a 1. A recursão implementa exatamente essa definição: cada chamada reduz o problema em 1, e o caso base (n < 2) retorna 1.
Esta questão cobra a execução de uma função recursiva que calcula o fatorial. Para resolver, é preciso simular as chamadas até o caso base e depois combinar os resultados na volta.
O que a questão dá
função y(n) definida recursivamente
chamada y(5)
caso base: se n < 2, retorna 1
caso recursivo: retorna n * y(n-1)
O que queremos: o resultado da execução de y(5)
Passo 1 — Simular a primeira chamada
Para entender o que a função faz, começamos pela chamada inicial y(5). Como 5 não é menor que 2, a função retorna 5 * y(4). Isso significa que o resultado final depende do resultado de y(4).
Por que esta fórmula: A definição da função é: se n < 2, retorna 1; senão, retorna n * y(n-1). Para n=5, a condição é falsa, então usamos a segunda parte.
De onde vem cada valor: = definição: chamada inicial y(5) · = definição: chamada recursiva com n-1
NÃO CAIA NESSA!
Achar que y(5) retorna 5 diretamente, sem considerar a recursão.
Passo 2 — Simular as chamadas intermediárias
Precisamos continuar expandindo as chamadas até chegar ao caso base. Cada chamada reduz o argumento em 1, então vamos de y(4) até y(1).
Por que esta fórmula: A mesma regra se aplica: para n=4, 3, 2, a condição n < 2 é falsa, então cada uma retorna n * y(n-1).
De onde vem cada valor: = definição: chamada y(4) · = definição: chamada y(3) · = definição: chamada y(2) · = definição: chamada recursiva com n-1
expressões encadeadas
NÃO CAIA NESSA!
Parar antes de chegar ao caso base, calculando apenas 5*4.
Passo 3 — Aplicar o caso base
A recursão precisa parar em algum momento. Quando n=1, a condição n < 2 é verdadeira, então a função retorna 1. Esse é o caso base que permite começar a voltar.
Por que esta fórmula: A definição da função diz explicitamente: se n < 2, retorna 1. Para n=1, isso se aplica.
De onde vem cada valor: = definição: chamada y(1)
NÃO CAIA NESSA!
Esquecer o caso base e tentar continuar para y(0), o que causaria recursão infinita.
Passo 4 — Calcular os retornos na volta
Com o caso base resolvido, agora voltamos pelas chamadas, substituindo cada y(n) pelo valor calculado. Isso é o 'desempilhar' da recursão.
Por que esta fórmula: Cada retorno é a multiplicação do número pelo valor da chamada anterior. Começamos de y(2) = 2 * y(1) = 21 = 2, depois y(3) = 32 = 6, e assim por diante.
De onde vem cada valor: = definição: chamada y(2) · = passo 3: resultado de y(1) · = definição: chamada y(3) · = passo 4: resultado de y(2) · = definição: chamada y(4) · = passo 4: resultado de y(3)
NÃO CAIA NESSA!
Multiplicar na ordem errada, por exemplo, 43 = 12 em vez de 46.
Passo 5 — Calcular o resultado final
Agora temos o valor de y(4), que é 24. Substituímos na primeira chamada para obter o resultado final.
Por que esta fórmula: Da primeira chamada, y(5) = 5 * y(4). Com y(4) = 24, temos 5 * 24 = 120.
De onde vem cada valor: = definição: chamada inicial · = passo 4: resultado de y(4)
NÃO CAIA NESSA!
Confundir com 5*4 = 20, ignorando os demais fatores.