计算多集的唯一排序数的最佳方法

时间:2014-04-23 14:38:22

标签: c math

我正在寻找一种更好地计算以下内容的方法。 问题是我无法弄清楚这种组合的名称。 首先,我想如果我有3个“a”和2个“b”, 然后我可以将b放在+ 1个位置_a_a_a_每次,为(a + 1)^ b次,但位置0和然后1或1然后0的选择顺序是相同的:即“baba”。

我已经想出了这种计算它的递归方式。

/* find all permutations of a non unique sequence of 0s and 1s
... "a"s and "b"s etc... */
/* e.g. how many ways to arange 4 apples and 3 oranges, 35 */

int *perms(int a, int b){
    static int total = 0;
    if(!a && !b){
        total++;
        return 0;
    }
    if(a > 0){
        perms(a-1,b);
    }
    if(b > 0){
        perms(a,b-1);
    }
    return &total;
}

我有一种强烈的感觉,我可以做得更好,更好。

1 个答案:

答案 0 :(得分:0)

larsmans在评论中给出的答案是(a + b)! /(a!* b!)或

factorial(a + b) / (factorial(a) * factorial(b))