Ir para conteúdo
Fórum Script Brasil
  • 0

Recursividade - Gostaria que alguém me explicasse, o que acontece nest


CyberLACS

Pergunta

Não estou conseguindo entender, seu que o valor do item a é 10 pois compilei no Dev C++, mas não estou conseguindo compreender como as coisas acontecem no problema abaixo.

Problema: Manuscritamente resolva os itens a) e B) por meio da função Rec:

a ) Qual o valor de Rec(5,3) ?

b ) Quantas chamadas serão feitas na avaliação acima?

int Rec(int n,int m)
{
    if (n==m || n==0)

        return 1;
    else
    {
        return Rec(n-1,m) + Rec(n-1,m+1);
    }

}

int main(void)
{
    int n = 5, m = 3;

    printf("%d",Rec(n, m));

    getch();
}

Fico no aguardo

Editado por CyberLACS
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0
Não estou conseguindo entender, seu que o valor do item a é 10 pois compilei no Dev C++, mas não estou conseguindo compreender como as coisas acontecem no problema abaixo.

Problema: Manuscritamente resolva os itens a) e B) por meio da função Rec:

a ) Qual o valor de Rec(5,3) ?

b ) Quantas chamadas serão feitas na avaliação acima?

int Rec(int n,int m)
{
    if (n==m || n==0)

        return 1;
    else
    {
        return Rec(n-1,m) + Rec(n-1,m+1);
    }

}

int main(void)
{
    int n = 5, m = 3;

    printf("%d",Rec(n, m));

    getch();
}
Fico no aguardo
Execute o código e veja se te ajuda você a atender o que acontece nesta recursividade. Quando estou com duvidas do que acontece durante a execução do código eu coloca alguns printf para ver o que esta acontece e qual será meu retorno. esta linha return Rec(n-1,m) + Rec(n-1,m+1); o Rec(n-1,m) chama a função Rec novamente já Rec(n-1,m+1) fica esperando o Rec(n-1,m) acabar de ser executado para chamar a funcao Rec novamente, mas quando o Rec(n-1,m) chama a função Rec haverá um novo return Rec(n-1,m) + Rec(n-1,m+1); que será executado primeiramente o Rec(n-1,m) pra depois executar Rec(n-1,m+1) que está recursividade só irar ter final quando executar o if (n==m || n==0) retornando o valor 1.
#include <stdio.h>
#include <stdlib.h>

int Rec(int n,int m){
    
    if (n==m || n==0){
       printf("\nEntrou no if: n = %d - m = %d\n", n, m);
       return 1;
    }else{
         printf("Entrou no else: n = %d - m = %d\n", n, m);
         return Rec(n-1,m) + Rec(n-1,m+1);
    }
}

int main(int argc, char *argv[]){
    int n = 5, m = 3;
    
    printf("%d",Rec(n, m));
    getch();

  system("PAUSE");    
  return 0;
}

o objetivo do programa e somar os if que são executados 10 vezes retornado uma soma no valor de 10.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...