if k < 1:
    raise StopIteration
if k == 1:
    if n >= l:
        yield n,
raise StopIteration
for i in range(l, n + 1):
    for result in partitionfunc(n - i, k - 1, i):
        yield (i,) + result
Целочисленное разбиение Python с заданными разделами k