Как я могу генерировать комбинации, как показано ниже, с помощью рекурсивного javascript?

Приносим извинения, я новичок, и у меня возникли проблемы с формулировкой своего вопроса, чтобы я мог найти его здесь, я пытался, но не смог найти ответ, используя свои условия поиска.

Учитывая 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. Если вы можете указать мне на дубликат или ответ, я сразу удалю этот вопрос, я знаю, что на него уже был дан ответ здесь.

Итерируйте от 0 до 4, поместите новый элемент в пустой массив, содержащий один из элементов комбинации.

Chloe Anderson 10.04.2021 01:09

комбинации или перестановки?

Jonas Wilms 10.04.2021 01:10

Это должно быть рекурсивное решение?

whiterook6 10.04.2021 01:12

@JonasWilms, извини, в чем разница? результирующий массив должен быть другим

Marco Cab 10.04.2021 01:12

@ whiterook6 да, а если нет, то проще?

Marco Cab 10.04.2021 01:13

При выполнении рекурсии найдите решение для базового случая N = 1. Затем выясните, как вы объедините случай со следующим, более простым делом.

Barmar 10.04.2021 01:13

Это дублирование: stackoverflow.com/questions/32543936/…

Rezart Qelibari 10.04.2021 01:13

@MarcoCab: Даже если этот пост является дубликатом, удалять его не нужно! Обычно дубликаты (после утверждения мода) закрывают сообщение и показывают «У этого сообщения уже есть ответы здесь: ...» для других, когда они спотыкаются о вопросе.

Logan Devine 10.04.2021 01:13

Отвечает ли это на ваш вопрос? Сочетание с повторением

Logan Devine 10.04.2021 01:13

Ах, на самом деле это уже в вопросе, вам нужна перестановка, поскольку порядок имеет значение ([1,1,1,2] и [1,1,2,1])

Jonas Wilms 10.04.2021 01:13

@Marco Cab проще или нет, зависит, но это нормально. Чтобы решить такую ​​рекурсивную проблему, вы должны сначала подумать о том, как разбить задачу на более мелкие части, а затем собрать их. Например, как решить эту проблему, когда вам нужен только один предмет? Я предполагаю, что массив будет выглядеть как [1, 2, 3]. Затем выясните, как использовать этот базовый вариант для построения решений еще для одного: something + [1, 2, 3].

whiterook6 10.04.2021 01:17

Спасибо всем. Он ответил на вопрос, можно оставить это здесь или мне удалить этот вопрос?

Marco Cab 10.04.2021 01:38

Это нормально оставить, может помочь будущим гуглерам найти это :)

Jonas Wilms 10.04.2021 01:54
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
13
25
1

Ответы 1

Это отличный вариант использования функции рекурсивного генератора:

  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++), и думаю: «Возвращает указатель на функцию? Какие?, подождите, это выходная штука»

Logan Devine 10.04.2021 01:15

Другие вопросы по теме