总计为A的N个整数的不同组的数量

ben*_*nyl 12 java math combinatorics

我想计算N个整数的不同有序组的数量,以便每个组的元素总和为A.

例如:如果N = 3且A = 3,则结果应为10:
1 = [3,0,0]
2 = [2,1,0]
3 = [1,2,0]
4 = [0,3 ,0]
5 = [2,0,1]
6 = [1,1,1]
7 = [0,2,1]
8 = [1,0,2]
9 = [0,1,2]
10 = [0,0,3]

我这样做的方式是蛮力:

public static int calc(int a, int n){
    if (n <= 1 || a == 0) return 1;

    int sum = 0;
    for (int i=0; i<=n; i++)
        sum += calc(a - i, n - 1);

    return sum;
}
Run Code Online (Sandbox Code Playgroud)

我怀疑可能有更好的方法(我错过了一些数学计算......)吗?

编辑 在原始问题中,我忘了考虑订单

MBo*_*MBo 5

这是A到N部分(包括零部分)的组合成分.对(A,N)的组成数等于C(A + N-1,A),其中C()是组合数,即二项式系数.在这里这里看到相同的公式