Java中的二项式系数(适应以下来源)

时间:2010-08-06 11:59:16

标签: java

我有2个参数,我希望方法返回一个int结果..我得到了这个代码,但我不明白naff所有关于binoms等,不知道如何“转换”它 已将double BC[126][126];定义在其上方的某处。但我不需要,我只想要这些n和m的结果。 (我可能听起来像是那样的numpty)

private void binom(int n, int m) {
    int i, j;

    if (n>=0)
        if (m>n||m<0) System.err.println("Illegal m!!\n");

        else { 
            for(i=0;i<=n;i++) BC[i][0] = 1;
            for(i=1;i<=m;i++) BC[0][i] = 0;
            for(j=1;j<=m;j++) for(i=1;i<=n;i++) 
                BC[i][j] = BC[i-1][j-1] + BC[i-1][j];
        }

    else System.err.println("Negative n!!\n");
}

2 个答案:

答案 0 :(得分:2)

您可以返回BC[n][m]这是您计算的元素,其中包含三个循环..

顺便说一下,你至少有三种可能的实施方式:

  • 琐碎的递归
  • 这个(动态编程)
  • 使用公式n! / (n-m)!m!这是不好的,因为事实操作很烦人

更正:如果您在每次调用方法时都避免重新计算所有系数,那么您的方法将是动态编程,但不是您的情况..

答案 1 :(得分:2)

请参阅文章Computing Binomial Coefficients以获得具有相似复杂性的示例 O(n 2 ,但仅使用 O(n) space而不是 O(n 2