int get_numerator(int val, int num, int dice)
{
 int i, ret = 0;

 if (val <= 0)
  return 0;
 else if (num == 1)
  return val <= dice ? 1 : 0;

 for (i = 1; i <= dice; i++) {
  ret += get_numerator(val - i, num - 1, dice);
 }

 return ret;
}

こんなのしか思いつかん。
多少の刈り込み(val==num時にreturn 1とか)は出来るけど、スマートじゃないな。