Questão de Algoritmos e Estrutura de Dados — Algoritmos — INSTITUTO AOCP 2020
Algoritmos e Estrutura de Dados›Algoritmos
Código
qq603476
Banca
INSTITUTO AOCP
Órgão
Prefeitura de Novo Hamburgo - RS
Ano
2020
Nível
Superior
Cargo
Analista de Desenvolvimento de Sistemas
Analise o seguinte algoritmo em pseudo-código e assinale a alternativa correta.inteiro funcao_A (inteiro n)iníciointeiro f;se ( n == 1) ou (n == 0) entãoretorna 1;f = funcao_A(n-1)*n;retorna f;fim.
AA primeira chamada da “funcao_A” com o argumento 2 provoca uma segunda chamada da “funcao_A” com o argumento 1.
BComo o programa é iterativo, faz-se necessário mais uma variável além de “f”, por exemplo, para armazenar os diversos passos do processamento.
CQuando a “funcao_A” é chamada com um argumento de 1, a função retorna o argumento 0 e não necessita executar a iteração.
DO algoritmo retorna erro para quando o argumento passado possui um valor maior que 1000 e menor que o valor máximo de um número inteiro.
EHá um laço que é executado de 1 a n, multiplicando progressivamente cada número pelo produto móvel dado por “f = funcao_A(n-1)*n;”.
Revelar gabarito e comentário▾
GabaritoA — A primeira chamada da “funcao_A” com o argumento 2 provoca uma segunda chamada da “funcao_A” com o argumento 1.
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”.
Recursividade: análise de função recursiva (fatorial)
Gabarito: letra A. A primeira chamada com argumento 2 gera uma chamada recursiva com argumento 1, conforme a condição de base. As demais alternativas incorrem em erros: confundem recursão com iteração, afirmam retorno incorreto, mencionam limite inexistente ou laço.
A função implementa o cálculo do fatorial de forma recursiva. Para n=0 ou n=1 retorna 1; para n>1, chama a si mesma com n-1 e multiplica por n.
Alternativa A — ✅ Correta ⟵ GABARITO
Na chamada funcao_A(2), como 2 não é 0 nem 1, o código executa f = funcao_A(1)*2. Isso de fato invoca funcao_A(1), que por sua vez entra no caso base e retorna 1. A afirmação está correta.
Alternativa B — ❌ Incorreta
O programa é recursivo, não iterativo. Não há laços (for, while). A recursão usa implicitamente a pilha de chamadas, não exigindo variáveis adicionais para armazenar passos.
Alternativa C — ❌ Incorreta
Quando n=1, a condição se (n==1) ou (n==0) é verdadeira, e a função retorna 1, não 0. Além disso, não há "iteração" — a execução é recursiva.
Alternativa D — ❌ Incorreta
O algoritmo não possui nenhuma verificação de faixa de valor. Para argumentos muito grandes, pode ocorrer estouro de pilha (stack overflow) ou overflow aritmético, mas o código em si não retorna erro explicitamente; ele apenas faria chamadas recursivas até estourar.
Alternativa E — ❌ Incorreta
Não há laço. A multiplicação progressiva é feita pela própria recursão: cada chamada multiplica o resultado da chamada anterior por n. A frase "laço executado de 1 a n" descreve uma abordagem iterativa, não o que ocorre no código.
PEGA ESSA DICA!
Ao analisar pseudocódigo, primeiro identifique se há recursão (chamada a si mesmo) ou iteração (laços). A função aqui é recursiva: note a chamada funcao_A(n-1) dentro do próprio corpo. Compare com a versão iterativa do fatorial, que usaria um laço para i de 1 até n.