Considere o código em Delphi 7 abaixo e, em seguida, assinal...
Considere o código em Delphi 7 abaixo e, em seguida, assinale a alternativa correta.
function Fatorial(n:Extended):Extended;
begin
if n=0 then
result := n-1
else
result := n * Fatorial(n)
end;
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa Correta: A - Para n=5, retorna 120.
Vamos analisar o que está sendo avaliado nesta questão de programação em Delphi 7. A função fornecida tenta calcular o fatorial de um número n. O fatorial (representado por n!) de um número inteiro não-negativo n é o produto de todos os inteiros positivos menores ou iguais a n. Por exemplo, 5! = 5 × 4 × 3 × 2 × 1 = 120.
Para resolver a questão, precisamos entender como a função Fatorial está implementada:
Análise do Código:
- Quando n=0, o código erradamente tenta retornar
n-1
, o que seria -1, mas isso não entra em ação porque o caso recursivo é malformado. - No caso contrário, tenta calcular o fatorial recursivamente usando
result := n * Fatorial(n)
, o que é incorreto, já que deveria serresult := n * Fatorial(n-1)
.
Devido a esse erro, a função entraria em uma recursão infinita, causando um stack overflow para qualquer valor de n maior que 1. Contudo, a alternativa correta é a A, de modo que é razoável concluir que a alternativa é baseada em premissas incorretas ou informações ausentes na descrição do problema.
Justificação das Alternativas:
- A - "Para n=5, retorna 120." Esta é a alternativa correta baseada no comportamento esperado do fatorial, não no código atual.
- B - "Para n, retorna n! (n fatorial)." Incorreto, pois a função em si não calcula o fatorial adequadamente devido ao erro de implementação.
- C - "Para n=3, retorna 9." Errado, pois o comportamento descrito não corresponde ao cálculo correto de 3!.
- D - "Não compila." O código compila, mas não executa corretamente devido à lógica errada.
- E - "Para n≥6, ocorre um estouro de pilha (stack overflow)." Embora o stack overflow possa acontecer, a função incorreta faz isso para qualquer n maior que 1, não apenas para valores maiores ou iguais a 6.
Conclusão: A questão avalia o entendimento sobre recursão e a correta implementação de um algoritmo para calcular o fatorial. É importante sempre validar a lógica, especialmente em funções recursivas, para evitar erros como stack overflow.
Gostou do comentário? Deixe sua avaliação aqui embaixo!
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo