此篇只是將以前數學課排列組合的公式寫成小函式,基本上沒什麼太大的功用,因為通常我們想要的是列出組合,而不是計算總共有多少組合數

//*************************************************
//  函式名稱:完全相異物直線排列的組合數
//  功能說明:
//   從 N 個不同事物中,任取 M 個排成一列的排列數的組合數
//*************************************************
function P(n,m){
    return (factorial(n)/factorial(n-m));
}
//*************************************************
//  函式名稱:相異物的組合數
//  功能說明:
//   從 N 個不同物件中,不重複且不計其前後次序
//   取 M個物件為一組的組合數
//*************************************************
function C(n,m){
    return P(n,m)/factorial(m);
}
//*************************************************
//  函式名稱:重複組合的組合數
//  功能說明:
//   從N類相異物中任取R個為一組,每類個數均不小於R
//   且可重複取,此組合為N中取R之重複組合
//*************************************************
function H(n,r){
    return C((r+n-1),(n-1));
}

注意以上函式會使用到之前所寫的階乘函式如下:

//*************************************************
//  函式名稱:階乘函式
//  功能說明:5! =  5 * 4 * 3 * 2 * 1 = echelon(5)
//*************************************************
function factorial(n){
    if(n == 1 || n == 0 ) {
        return 1;
    } else {
        return n * factorial(n - 1);
    }
}

公式參考來源:http://eprob.math.nsysu.edu.tw/PerComb.htm

低溫烘培 發表在 痞客邦 PIXNET 留言(0) 人氣()