javascript 中给定数字数组的组合数

Number of combinations in a given number array in javascript

var ans = (49*48*47*46*45*44)/(6*5*4*3*2*1)

alert(ans.toLocaleString())

这将输出 13,983,816 并且它是从 1 到 49 的数字数组中正确的可能组合数。

如何使用从 2 个变量中获得的数字来实现这一点?

例如,如果我想计算 40 个数字中 5 个可能的组合数,我需要 (40*39*38*37*36)/(5*4*3*2*1)我需要将其替换为: 40*39*38*37*36var n 和 (5*4*3*2 *1) 使用 var t 但输出数字的正确顺序。

明确一点,我不想在变量中手动编写这些操作,我希望变量中指定的数字根据它们的值生成操作。如果我指定6个选择我需要生成6*5*4*3*2*1,如果我指定5个选择它需要生成5*4*3*2*1等等。

感谢您的帮助!

已更新,(带循环):

Number.prototype.to = function(to){
  var result = 1;
  while(this >= to) result *= to++;
  return result
};

var n = 49..to(44); //49*48*47*46*45*44
var t = 6..to(1); //6*5*4*3*2*1

document.writeln((n/t).toLocaleString())

没关系,我在几个小时后设法弄明白了:

function getChance(numbers, out_of) {
    return numbers>0?out_of/numbers*getChance(numbers-1,out_of-1):1;   

}

var np = 6; //numbers picked
var tn = 49; //total numbers

var ntm = 6; //numbers to match

var picks = getChance(np-ntm, tn-ntm);
var combs = getChance(np, tn);

var probs = combs/picks;

document.getElementById('chance').innerHTML = (probs | 0).toLocaleString();

您可以尝试 for 循环:

function binom(a,b) {
  if(a < 2*b) b = a-b;
  var n = 1;
  for(var i=a-b+1; i<=a; ++i) n *= i;
  for(var i=2; i<=b; ++i) n /= i;
  return n;
}