Pular para o conteúdo principal

Questão de Algoritmos e Estrutura de Dados — Algoritmos — INSTITUTO AOCP 2020

Algoritmos e Estrutura de DadosAlgoritmos
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.
  1. AA primeira chamada da “funcao_A” com o argumento 2 provoca uma segunda chamada da “funcao_A” com o argumento 1.
  2. 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.
  3. 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.
  4. 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.
  5. 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.

Gabarito: letra A (única correta).

Link permanente: /questoes/qq603476