// 排列:正數n的全排列
// n 正數n
// return 數值
function A(n) {
if (n <= 0) return n;
var sum = 1;
for (var i = n; i > 0; --i) {
sum *= i;
}
return sum;
}
// 組合:從n個中選擇m個來組合
// n 正數n
// m 正數m
// return 數值
function C(n, m) {
return A(n) / (A(m) * A(n - m));
}
// 數組組合: 從array中選擇n個元素來組合
// array 數組
// n 正數n
// return 多少種組合
function ArrayComb(array, n) {
var result = [], t = [], e;
function Recursion(index, array, n, t, result) {
if (t.length === n) { result.push(t.slice()); return };
for (var i = index; i < array.length; ++i) {
e = array[i];
t.push(e);
Recursion(i + 1, array, n, t, result);
t.pop();
}
}
Recursion(0, array, n, t, result);
return result;
}