Мне нужно сгенерировать все комбинации размера n из списка предметов. Я пытаюсь решить это функционально с помощью рекурсии. Вот мое решение:
def combinations(i: Int, value: List[Symbol]): List[List[Symbol]] = {
if (i == 0) List(Nil)
else if (i == value.size) List(value)
else value match {
case Nil => List(Nil)
case head::tail => {
combinations(i, tail) ::: combinations(i - 1, tail) map { tailCombos => head :: tailCombos }
}
}
}
Вот мой тестовый ввод: combinations(3, List('a, 'b, 'c, 'd ))
Я получаю List(List('a, 'b, 'c, 'd), List('a, 'b, 'c, 'd), List('a, 'b, 'c, 'd), List('a, 'b, 'c))
вместо List(List('b, 'c, 'd), List('a, 'b, 'd), List('a, 'c, 'd), List('a, 'b, 'c))
Есть и другие решения, на которые я могу сослаться, поэтому, пожалуйста, не давайте мне какое-то рабочее решение. Однако я хочу знать, почему мой код не работает и что нужно исправить.