KSubsets[l_List, 0] := {{}} KSubsets[l_List, 1] := Partition[l, 1] KSubsets[l_List, k_Integer?Positive] := {l} /; (k == Length[l]) KSubsets[l_List, k_Integer?Positive] := {} /; (k > Length[l]) KSubsets[l_List, k_Integer?Positive] := Join[Map[(Prepend[#, First[l]]) &, KSubsets[Rest[l], k - 1]], KSubsets[Rest[l], k]]