Perhaps running the code may help you understand?
Here's my quick-n-dirty reimplementation in Python:
def somerec(n, x, y):
if n < x*y:
return 0
if n == x*y:
return 1
sum_ = 0
for i in range(x, n+1):
sum_ += somerec(n-i, i, y-1)
return sum_
Trying it out:
>>> [somerec(i, 1, 2) for i in range(30)]
[0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12,
12, 13, 13, 14, 14]
>>> [somerec(i, 1, 3) for i in range(30)]
[0, 0, 0, 1, 1, 2, 3, 4, 5, 7, 8, 10, 12, 14, 16, 19, 21, 24, 27, 30, 33, 37, 40,
44, 48, 52, 56, 61, 65, 70]
>>> [somerec(i, 1, 4) for i in range(30)]
[0, 0, 0, 0, 1, 1, 2, 3, 5, 6, 9, 11, 15, 18, 23, 27, 34, 39, 47, 54, 64, 72, 84,
94, 108, 120, 136, 150, 169, 185]
>>> [somerec(i, 2, 4) for i in range(30)]
[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 5, 6, 9, 11, 15, 18, 23, 27, 34, 39, 47, 54,
64, 72, 84, 94, 108, 120]