# Calculation of combinations of length k from a list of length n using recursion

I need to generate all the combinations with length `k` from a list of length `n`, and I must do it using recursion.

For Example:

``````INPUT:  choose_sets([1,2,3,4],3)
OUTPUT: [[1,2,3],[1,2,4],[1,3,4],[2,3,4]]
```
```
``````INPUT:  choose_sets([1,2,3,4],2)
OUTPUT: [[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]]
```
```

I'm stuck implementing this in code, so I would be happy for some help. This is my code so far (I'm missing something just don't know what):

``````def choose_sets(lst,k):

if k == len(lst):
return lst
if k == 0:
return []
if k > len(lst):
return []

sets=[]
sub_lst=lst[:]
sub_lst.remove(sub_lst)

a= choose_sets(sub_lst,k-1)
for i in a:
i.append(lst)
sets.append(a)

b= choose_sets(sub_lst,k)
sets.append(b)

return sets
```
```

You can get solution from Generator for permutations, combinations, selections of a sequence (Python recipe)

``````def xuniqueCombinations(items, n):
if n==0: yield []
else:
for i in xrange(len(items)):
for cc in xuniqueCombinations(items[i+1:],n-1):
yield [items[i]]+cc

>>> def xuniqueCombinations(items, n):
...     if n==0: yield []
...     else:
...         for i in xrange(len(items)):
...             for cc in xuniqueCombinations(items[i+1:],n-1):
...                 yield [items[i]]+cc
...
>>> for x in xuniqueCombinations( [1,2,3,4],2):
...     print x
[1, 2]
[1, 3]
[1, 4]
[2, 3]
[2, 4]
[3, 4]
```
```

Edited 4 year later (7/12/2015)

To run it on Python3 just change `xrange` to `range`, Python3's range is Python2's xrange.. Thanks @ederollora to notice me.