/* Problema.  Calcular o número de partições p(m) de um inteiro */
/* positivo m.  Na solução nos usamos a função q(m,n) que é o */
/* numero de partições de m onde cada parcela é menor ou igual */
/* a n. */

int q(int m, int n) 
{
  if (m == 1 || n == 1) 
    return 1; /* base da recursão */
  else if (n > m)  /* Caso 1. n > m */
    return q(m,m);
  else if (n == m) /* Caso 2. n = m */
    return 1 + q(m,m-1);
  else /* Caso 3. M > n */
    return q(m,m-1) + q(m-n,n); 
} /* Notar que o Caso 1 e 2 podem ser colapsados */
