Alguém poderia me explicar esse código em C

Boa tarde.
Estou tentando debugar esse código, mas não estou conseguindo. Alguém poderia me explicar?
Os valores de n = 4 e m = 2

int x (int n, int m)

{
if((n==m)||(m==0))
{
return 1;
}

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

}

No caso, no primeiro momento vai entrar no if e vai verificar se n == m, no caso os dois são zeros, Então eles serão iguais, então entra na condição do if, que é o return 1.
Feito isso, eu irei voltar no if novamente e verificar se n == m? não estou entendendo isso, alguem poderia me auxiliar?

Gostaria de saber como resolve essa linha

return x(n-1,m) + x(n-1 ,m-1);

1 curtida

Não, a instrução return vai encerrar a execução da função e retornar aquele valor para quem a chamou.

Você disse que n e m são 0, certo?

Então em algum lugar você deve ter algum código assim:

int valor = x(0, 0); // a variável valor vai receber o valor retornado pela função x

Supondo que n = 4 e m = 2, então sua função será chamada recursivamente, você pode fazer um teste de mesa, conforme abaixo para visualizar os valores:

n = 4
m = 2
x(4, 2)
verifica ( n é igual à m ) OU ( m é igual à 0 ) ?  não
|    
|    x(n - 1, m)
|    n = 4 - 1
|    n = 3
|    m = 2
|    x(3, 2)
|    verifica ( n é igual à m ) OU ( m é igual à 0 ) ?  não
|    |    
|    |    x(n - 1, m)
|    |    n = 3 - 1
|    |    n = 2
|    |    m = 2
|    |    x(2, 2)
|    |    verifica ( n é igual à m ) OU ( m é igual à 0 ) ?  sim
|    |    |    
|    |    |    return 1
|    |    |    
|    |    x(2, 2) = 1
|    |    
|    |    +
|    |    
|    |    x(n - 1, m - 1)
|    |    n = 3 - 1
|    |    m = 2 - 1
|    |    n = 2
|    |    m = 1
|    |    x(2, 1)
|    |    verifica ( n é igual à m ) OU ( m é igual à 0 ) ?  não
|    |    |    
|    |    |    x(n - 1, m)
|    |    |    n = 2 - 1
|    |    |    n = 1
|    |    |    m = 1
|    |    |    x(1, 1)
|    |    |    verifica ( n é igual à m ) OU ( m é igual à 0 ) ?  sim
|    |    |    |    
|    |    |    |    return 1
|    |    |    |    
|    |    |    x(1, 1) = 1
|    |    |    
|    |    |    +
|    |    |    
|    |    |    x(n - 1, m - 1)
|    |    |    n = 2 - 1
|    |    |    m = 1 - 1
|    |    |    n = 1
|    |    |    m = 0
|    |    |    x(1, 0)
|    |    |    verifica ( n é igual à m ) OU ( m é igual à 0 ) ?  sim
|    |    |    |    
|    |    |    |    return 1
|    |    |    |    
|    |    |    x(1, 0) = 1
|    |    |    
|    |    |    return 1 + 1
|    |    |    
|    |    x(2, 1) = 2
|    |    
|    |    return 1 + 2
|    |    
|    x(3, 2) = 3
|    
|    +
|    
|    x(n - 1, m - 1)
|    n = 4 - 1
|    m = 2 - 1
|    n = 3
|    m = 1
|    x(3, 1)
|    verifica ( n é igual à m ) OU ( m é igual à 0 ) ?  não
|    |    
|    |    x(n - 1, m)
|    |    n = 3 - 1
|    |    n = 2
|    |    m = 1
|    |    x(2, 1)
|    |    verifica ( n é igual à m ) OU ( m é igual à 0 ) ?  não
|    |    |    
|    |    |    x(n - 1, m)
|    |    |    n = 2 - 1
|    |    |    n = 1
|    |    |    m = 1
|    |    |    x(1, 1)
|    |    |    verifica ( n é igual à m ) OU ( m é igual à 0 ) ?  sim
|    |    |    |    
|    |    |    |    return 1
|    |    |    |    
|    |    |    x(1, 1) = 1
|    |    |    
|    |    |    +
|    |    |    
|    |    |    x(n - 1, m - 1)
|    |    |    n = 2 - 1
|    |    |    m = 1 - 1
|    |    |    n = 1
|    |    |    m = 0
|    |    |    x(1, 0)
|    |    |    verifica ( n é igual à m ) OU ( m é igual à 0 ) ?  sim
|    |    |    |    
|    |    |    |    return 1
|    |    |    |    
|    |    |    x(1, 0) = 1
|    |    |    
|    |    |    return 1 + 1
|    |    |    
|    |    x(2, 1) = 2
|    |    
|    |    +
|    |    
|    |    x(n - 1, m - 1)
|    |    n = 3 - 1
|    |    m = 1 - 1
|    |    n = 2
|    |    m = 0
|    |    x(2, 0)
|    |    verifica ( n é igual à m ) OU ( m é igual à 0 ) ?  sim
|    |    |    
|    |    |    return 1
|    |    |    
|    |    x(2, 0) = 1
|    |    
|    |    return 2 + 1
|    |    
|    x(3, 1) = 3
|    
|    return 3 + 3
|    
x(4, 2) = 6
2 curtidas

Muito Obrigado, Conseguiu tirar minhas dúvidas referentes a esse return.

1 curtida