Детализация алгоритма генерации комбинации - PullRequest
0 голосов
/ 24 августа 2018

Код ниже работает, отображая список комбинаций. Однако я не могу понять, почему переключение порядка двух рекурсивных вызовов в comb_util нарушает код. Почему это? Мне кажется, что они вообще не должны мешать друг другу, поскольку печатают комбинации.

function combinations(arr, n, r) {
  var data = [];
  comb_util(arr, n, r, 0, data, 0);
}

function comb_util(arr, n, r, index_data, data, index_arr) {
  if(index_data == r) {
    console.log(data);
    return;
  }
  if(index_arr >= n) {
    return;
  }
  data[index_data] = arr[index_arr];
  comb_util(arr, n, r, index_data + 1, data, index_arr + 1);
  comb_util(arr, n, r, index_data, data, index_arr + 1);
}

var data = [1,2,3,4];
var n = data.length;
var r = 3;
combinations(data, n, r);

function combinations(arr, n, r) {
  var data = [];
  comb_util(arr, n, r, 0, data, 0);
}

function comb_util(arr, n, r, index_data, data, index_arr) {
  if(index_data == r) {
    console.log(data);
    return;
  }
  if(index_arr >= n) {
    return;
  }
  data[index_data] = arr[index_arr];
  comb_util(arr, n, r, index_data, data, index_arr + 1);
  comb_util(arr, n, r, index_data + 1, data, index_arr + 1);
}

var data = [1,2,3,4];
var n = data.length;
var r = 3;
combinations(data, n, r);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...