Ao implementar uma função recursiva que não possui uma condição de parada adequada, o que normalmente acontece na organização do computador?
Selecione uma opção:
◯ - sistema fecha automaticamente o programa
◯ Um registro da memória cache é sobrescrito
◯ Um fragmento de código é otimizado pelo compilador
◯ A memória RAM é liberada automaticamente
◯ Há um estouro de pilha (stack overflow) devido ao uso excessivo de memória da pilha de chamadas

Passo 1

O que o enunciado pede:
  • Identificar o que normalmente acontece na organização do computador quando se implementa uma função recursiva que NÃO possui uma condição de parada adequada (isto é, quando a recursão é infinita ou cresce sem limite).
Informações e opções fornecidas:
  • Opção A: sistema fecha automaticamente o programa
  • Opção B: Um registro da memória cache é sobrescrito
  • Opção C: Um fragmento de código é otimizado pelo compilador
  • Opção D: A memória RAM é liberada automaticamente
  • Opção E: Há um estouro de pilha (stack overflow) devido ao uso excessivo de memória da pilha de chamadas

Passo 2

Conceito básico e por que isso importa (explicação didática e sem pular etapas).
  • O que é recursão: recursão é quando uma função chama a si mesma. Cada chamada cria um “quadro de ativação” (stack frame) na pilha de chamadas. Esse quadro guarda coisas como: endereço para retorno (onde continuar ao terminar), parâmetros da função, variáveis locais e espaço para o resultado.
  • Por que precisa de condição de parada: uma recursão correta tem pelo menos um caso base (condição de parada) para que, em algum momento, as chamadas deixem de se encadear e comecem a retornar. Se esse caso base faltar ou nunca for atingido, a função continua chamando a si mesma indefinidamente.
  • O que acontece a cada chamada: a cada novo chamado recursivo a pilha de chamadas aumenta — mais um quadro é empilhado. Esse crescimento consome memória reservada para a pilha do processo.

Passo 3

O limite de recursos e o fenômeno de erro que ocorre.
  • A maioria dos sistemas opera com um limite finito para o tamanho da pilha de cada processo. Esse limite pode ser imposto pelo sistema operacional ou pela runtime (por exemplo, limites típicos de pilha são alguns megabytes por processo).
  • Quando a recursão continua crescendo sem parar, a pilha vai crescendo até atingir esse limite.
  • Quando o limite é ultrapassado ocorre um estouro de pilha (stack overflow). Em termos práticos, o processo não consegue alocar mais espaço para um novo quadro de ativação e a execução falha.
  • Comportamento observável: dependendo da linguagem/ambiente, o programa pode lançar uma exceção/erro de stack overflow, ou o sistema operacional pode encerrar o processo (provendo um sinal de violação de memória ou similar). Mas a causa técnica é o estouro da pilha de chamadas.

Passo 4

Exemplo simples (para você enxergar passo a passo como isso acontece)
  • Considere pseudocódigo sem condição de parada:
    function recur():
    recur()
  • Primeiro chamado: quadro A é empilhado.
  • Dentro de A chama recur() de novo: quadro B é empilhado.
  • Dentro de B chama recur(): quadro C é empilhado.
  • E assim por diante até que a pilha atinja o limite → ocorre stack overflow.
  • Analogia rápida: empilhar pratos sem parar até que a pilha caia — aqui “cair” é o erro/encerramento do processo.

Passo 5

Por que as outras opções estão erradas (resumo curto e claro)
  • “sistema fecha automaticamente o programa”: pode ocorrer que o SO termine o processo quando há erro, mas isso é consequência do estouro de pilha; a afirmação isolada não descreve corretamente o mecanismo que ocorre na organização do computador.
  • “Um registro da memória cache é sobrescrito”: cache/registradores não são tipicamente sobrescritos por recursão — o problema principal é o crescimento da pilha, não da cache.
  • “Um fragmento de código é otimizado pelo compilador”: otimização do compilador não transforma recursão infinita em algo seguro; otimizações não resolvem falta de caso base.
  • “A memória RAM é liberada automaticamente”: não é liberada por causa da recursão — na verdade, mais memória de pilha é consumida até o limite; liberação automática não acontece como consequência de recursão sem parada.
  • A descrição que diz explicitamente “estouro de pilha (stack overflow) devido ao uso excessivo de memória da pilha de chamadas” corresponde exatamente ao fenômeno técnico que ocorre.

Passo 6

Encorajamento e dica prática para prova
  • Quando ver uma função recursiva sem condição de parada ou com condição impossível de atingir, assuma que a pilha cresce indefinidamente e que o efeito será stack overflow.
  • Boa forma de testar mentalmente: pergunte “essa chamada leva eventualmente ao caso base?” Se não levar, a resposta correta costuma ser o estouro da pilha.

Resposta

Há um estouro de pilha (stack overflow) devido ao uso excessivo de memória da pilha de chamadas

Exercícios relacionados