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
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo