Ir ao conteúdo

Posts recomendados

Postado

Alguém consegue me explicar esse código? Não faço ideia do porque o resultado é 13 (eu me perco na hora da recursividade (return X(n-1) + n * X(n-2);))

 

#include <stdio.h>
#include <stdlib.h>

float X(float n) {
   if (n == 1 || n == 2)
   return n;
   else
   return X(n-1) + n * X(n-2);
}

int main(){

  printf("%f\n", X(4));

  return 0;
}
 

  • Curtir 1
Postado

Muito simples, enquanto o argumento for diferente de 1 e 2 a função chama outro ocorrência de si (recursividade) de duas formas; decrementando n em 1 e 2 em seguida somando o primeiro caso com o produto do segundo caso. Se quiser ver o que acontece com n, basta colocar um print antes da instrução de controle IF.

Quando n= 4

X(4 - 1) + 4 * X(4 - 2)
    |              |
    |    + 4 *     2    =  8
    |                      |
X(3 - 1) + 3 * X(3 - 2)    +
    |              |       |
    2    + 3 *     1    =  5
                           |--> 5 + 8 = 13

Entendeu ???

  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!