Considerando um trecho de código funcional e analisando as seguintes linhas de comando, qual valor será impresso como resultado após a execução do código se o valor atribuído à variável x , do tipo inteiro, na função main, for 4 (quatro)?
int funcRec(int x){
if(x==1){
return -x;
}
else {
return -5 * funcRec(x-1)+x;
}
}
int main(){
printf(%d, funcRec(x));
return 0;
}

Passo 1

Beleza, então o que a questão está pedindo? Temos um trechinho de código em C que faz uma função recursiva chamada funcRec. Na main, a variável x vale 4, e eles fazem printf("%d", funcRec(x));. A parada aqui é de recursão: a função se chama de novo até chegar num caso base. Para resolver, a gente vai usar a definição da função, expandir as chamadas recursivas passo a passo e, no final, ver o número que aparece.
Conteúdo: recursão (caso base e passo recursivo), chamada de função e substituição de valores.

Passo 2

Primeiro, identifica o caso base da recursão. Olha o código:
if(x==1){
  return -x;
}
Isso significa que quando funcRec(1) = -1 , a função simplesmente retorna .
Em notação matemática:

Passo 3

Agora, vamos para funcRec(2) = -5 times funcRec(2-1) + 2 . Como não é caso base, usamos o “passo recursivo”:
funcRec(2) = -5 times (-1) + 2 = 5 + 2 = 7
Já sabemos que . Então:

Passo 4

Segue para funcRec(3) = -5 times funcRec(3-1) + 3 :
funcRec(3) = -5 times 7 + 3 = -35 + 3 = -32
A gente acabou de achar . Então:

Passo 5

Finalmente, para funcRec(4) = -5 times funcRec(4-1) + 4 :
funcRec(4) = -5 times (-32) + 4 = 160 + 4 = 164
Sabendo que :

Resposta

O código vai imprimir 164.

Exercícios relacionados