Приносим извинения, я новичок, и у меня возникли проблемы с формулировкой своего вопроса, чтобы я мог найти его здесь, я пытался, но не смог найти ответ, используя свои условия поиска.
Учитывая 1. числовую длину массива и 2. массив различных чисел, как я могу получить такую комбинацию посредством рекурсии?
const number_of_combinations = 4; // the arrays must be 4 in length
const combinations = [1,2,3];
// answer
// [1,1,1,1]
// [1,1,1,2]
// [1,1,1,3]
// [1,1,2,1]
// [1,1,2,2]
// [1,1,2,3]
// etc....
p.s. Если вы можете указать мне на дубликат или ответ, я сразу удалю этот вопрос, я знаю, что на него уже был дан ответ здесь.
комбинации или перестановки?
Это должно быть рекурсивное решение?
@JonasWilms, извини, в чем разница? результирующий массив должен быть другим
@ whiterook6 да, а если нет, то проще?
При выполнении рекурсии найдите решение для базового случая N = 1. Затем выясните, как вы объедините случай со следующим, более простым делом.
Это дублирование: stackoverflow.com/questions/32543936/…
@MarcoCab: Даже если этот пост является дубликатом, удалять его не нужно! Обычно дубликаты (после утверждения мода) закрывают сообщение и показывают «У этого сообщения уже есть ответы здесь: ...» для других, когда они спотыкаются о вопросе.
Отвечает ли это на ваш вопрос? Сочетание с повторением
Ах, на самом деле это уже в вопросе, вам нужна перестановка, поскольку порядок имеет значение ([1,1,1,2] и [1,1,2,1])
@Marco Cab проще или нет, зависит, но это нормально. Чтобы решить такую рекурсивную проблему, вы должны сначала подумать о том, как разбить задачу на более мелкие части, а затем собрать их. Например, как решить эту проблему, когда вам нужен только один предмет? Я предполагаю, что массив будет выглядеть как [1, 2, 3]. Затем выясните, как использовать этот базовый вариант для построения решений еще для одного: something + [1, 2, 3].
Спасибо всем. Он ответил на вопрос, можно оставить это здесь или мне удалить этот вопрос?
Это нормально оставить, может помочь будущим гуглерам найти это :)



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Это отличный вариант использования функции рекурсивного генератора:
function* combine(source, length, prev = []) {
if (prev.length >= length) {
yield prev;
return;
}
for(const el of source) {
yield* combine(source, length, [...prev, el]);
}
}
const result = [...combine([1, 2, 3], 4)];
Я всегда смущаюсь, видя function * (исходящий из фона C++), и думаю: «Возвращает указатель на функцию? Какие?, подождите, это выходная штука»
Итерируйте от 0 до 4, поместите новый элемент в пустой массив, содержащий один из элементов комбинации.