> For the complete documentation index, see [llms.txt](https://trizen.gitbook.io/sidef-lang/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://trizen.gitbook.io/sidef-lang/programming_tasks/c/combinations_with_repetitions.md).

# Combinations with repetitions

```ruby
func cwr (n, l, a = []) {
    n>0 ? (^l -> map {|k| __FUNC__(n-1, l.slice(k), [a..., l[k]]) }) : a
}

cwr(2, %w(iced jam plain)).each {|a|
    say a.map{ .join(' ') }.join("\n")
}
```

Also built-in:

```ruby
%w(iced jam plain).combinations_with_repetition(2, {|*a|
    say a.join(' ')
})
```

## Output:

```
iced iced
iced jam
iced plain
jam jam
jam plain
plain plain
```

Efficient counting of the total number of combinations with repetition:

```ruby
func cwr_count (n, m) { binomial(n + m - 1, m) }
printf("\nThere are %s ways to pick 7 out of 10 with repetition\n", cwr_count(10, 7))
```

## Output:

```
There are 11440 ways to pick 7 out of 10 with repetition
```
