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;
}
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
, a função simplesmente retorna
.
Em notação matemática:
Em notação matemática:
Passo 3
Agora, vamos para
. Como não é caso base, usamos o “passo recursivo”:
Já sabemos que
. Então:
Passo 4
Segue para
:
A gente acabou de achar
. Então:
Passo 5
Finalmente, para
:
Sabendo que
:
Resposta
O código vai imprimir 164.