我正在寻找一种更好地计算以下内容的方法。 问题是我无法弄清楚这种组合的名称。 首先,我想如果我有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;
}
我有一种强烈的感觉,我可以做得更好,更好。
答案 0 :(得分:0)
larsmans在评论中给出的答案是(a + b)! /(a!* b!)或
factorial(a + b) / (factorial(a) * factorial(b))