Computação Múltipla Escolha

Considere o seguinte método: 1 publicvoid stringRecur(string s) 2 { 3 if (s.length() < 15) 4 cout << s << endl; 5 stringRecur(s + "*"); 6 } Quando é que esse método terminará sem erro?

Considere o seguinte método:

1 publicvoid stringRecur(string s)
2 {
3 if (s.length() < 15)
4 cout << s << endl;
5 stringRecur(s + "*");
6 }

Quando é que esse método terminará sem erro?

  1. Quando o comprimento da string for maior ou igual a 15
  2. Com todas as strings sejam elas quais forem
  3. Para nenhuma string
  4. Quando o comprimento da string for menor que 15
  5. Quando a string for nula

Resolução completa

Explicação passo a passo

C
Alternativa C

Alternativa C - Para nenhuma string

A questão apresenta um método recursivo com uma lógica de controle de fluxo que resulta em recursão infinita. Para entender por que ele nunca termina sem erro, precisamos analisar a estrutura sintática do código apresentado.

Análise da Estrutura do Código:

  1. Comando if sem chaves {}:
    Em linguagens como C++, Java ou C#, quando não utilizamos chaves para delimitar o bloco de um comando condicional (if), apenas a linha imediatamente seguinte pertence a esse comando.

No código da imagem:

    if (s.length() < 15)          // Linha 3
        cout << s << endl;        // Linha 4 (dentro do IF)
    stringRecur(s + "*");         // Linha 5 (fora do IF)

A linha 5 está alinhada horizontalmente com a linha 3, confirmando que ela não está condicionada ao if.

  1. Chamada Recursiva Incondicional:
    A instrução stringRecur(s + "*"); é executada em todas as chamadas, independentemente do tamanho da string. Isso significa que mesmo quando o comprimento da string atingir ou ultrapassar 15 caracteres, o método continuará chamando a si mesmo.
  2. Crescimento Infinito:
    A cada chamada recursiva, um caractere asterisco () é adicionado à string (s + ""). O tamanho da string aumenta indefinidamente (n \rightarrow n+1 \rightarrow n+2 \dots).

Resultado Final:
Como não existe uma condição de parada (caso base) que impeça a chamada recursiva, o método ocupará toda a memória da pilha de execução (Stack Overflow) até travar o programa. Portanto, ele nunca terminará com sucesso.

Resumo das Alternativas

OpçãoAnáliseStatus
a. Quando o comprimento \geq 15Incorreto. O método continua executando além desse ponto.
b. Com todas as strings...Incorreto. Nenhuma string permite a terminação segura.
c. Para nenhuma stringCorreto. A recursão é infinita e causará erro.
d. Quando o comprimento < 15Incorreto. É a fase onde ele imprime, mas não termina.
e. Quando a string for nulaIncorreto. Não há verificação de nulidade e gera erro lógico.

Portanto, devido à ausência de uma cláusula de retorno ou de bloqueio na recursão, o método falhará sempre.

Tem outra questão para resolver?

Resolver agora com IA

Mais questões de Computação

Ver mais Computação resolvidas

Tem outra questão de Computação?

Cole o enunciado, tire uma foto ou descreva o problema — a IA resolve com explicação completa em segundos.