Analise a seguinte função, elaborada na linguagem C de prog...
Analise a seguinte função, elaborada na linguagem C de programação.
func_f(n)
int n; { int a, b; if (n == 0) return(1); a = n – 1; b = func_f(a); return(n*b); } Caso, no programa principal, seja colocada a linha printf(”%d”, func_f(4)); o valor impresso na saída padrão será:Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: A - 24
A questão apresentada aborda conceitos fundamentais de programação em C, particularmente a recursão. A compreensão de funções recursivas é essencial para resolver problemas desse tipo, onde uma função se chama a si mesma para calcular um valor.
Vamos analisar a função func_f: ela recebe um número inteiro n como parâmetro e utiliza uma estrutura if para verificar se n é igual a 0. Se for, a função retorna 1. Caso contrário, a função chama a si mesma com o argumento n - 1 e depois multiplica o resultado por n.
Dessa forma, a função func_f está calculando o fatorial de n. O fatorial de um número n, denotado por n!, é o produto de todos os números inteiros positivos de 1 até n. Assim, para n = 4, a sequência de chamadas recursivas seria:
func_f(4)= 4 *func_f(3)func_f(3)= 3 *func_f(2)func_f(2)= 2 *func_f(1)func_f(1)= 1 *func_f(0)func_f(0)= 1
Substituindo de volta, temos:
func_f(1)= 1 * 1 = 1func_f(2)= 2 * 1 = 2func_f(3)= 3 * 2 = 6func_f(4)= 4 * 6 = 24
A função retorna 24, que é o valor correto impresso quando chamamos printf("%d", func_f(4));.
Agora, vejamos por que as outras alternativas estão incorretas:
B - 0: Este resultado não seria possível, já que a função nunca retorna 0 para nenhum valor de n.
C - 1: Esta saída confundiria o comportamento base da função, mas ela só retorna 1 quando n = 0, o que não é o caso aqui.
D - 6: Este valor representa o fatorial de 3. A função, no entanto, está calculando o fatorial de 4.
E - 12: Este resultado é incorreto porque não corresponde a nenhum fatorial de 4 ou a qualquer valor intermediário no cálculo recursivo.
Espero que esta explicação tenha ajudado a compreender a lógica por trás da função recursiva e como chegar à solução correta. Se ainda restarem dúvidas, sinta-se à vontade para perguntar!
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
Comentários
Veja os comentários dos nossos alunos
O examinador tentou dar uma complicada, mas a resolução questões recursivas seguem sempre o mesmo padrão.
Primeiro monta as funções:
f(4) = 4*f(3)
f(3) = 3*f(2)
f(2) = 2*f(1)
f(1) = 1*f(0)
f(0) = 1
Depois resolve de trás pra frente:
f(0) = 1
f(1) = 1*1 = 1
f(2) = 2*1 = 2
f(3) = 3*2 = 6
f(4) = 4*6 = 24
laço 1:
4-1 = 3
laço 2:
3-1 = 2
laço 3:
2-1 = 1
laço 4:
1-1 = 0
laço 5 (Saiu do laço)
4x3 = 12
4x2 = 8
4x1 = 4
4x0 = 0
Somatório = 24
Formatação bonitinha para você pequeno gafanhoto:
unc_f(n)
int n;
{
int a, b;
if (n == 0) return (1);
a = n– 1;
b = func_f(a);
return (n * b);
}
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo