Java:计算二项式系数

时间:2016-04-28 21:26:05

标签: java math

我有以下程序计算两个整数的二项式系数。但我想改变程序,它只计算并保存解决方案所需的系数。 问题是我现在真的不知道怎么做。 The Code

 public static long binomialIteration(int n, int k)


{
     if(k<0 || n<k)
     {
         return 0;
     }
     long[][] h= new long[n+1][n+1];
     for(int i=0; i<=n; i++)
     {
         h[i][0]=h[i][i]=1;    
     }
     for(int i=1;i<=n;i++)
     {
         for(int j=0; j<=i; j++)
         {
             h[i][j] = (j==0 ? 0: h[i-1][j-1]) + (i == j ? 0 : h[i-1][j]);
         }
     }
     return h[n][k];
 }

3 个答案:

答案 0 :(得分:3)

这个Code from this site

怎么样?
 private static long binomial(int n, int k)
    {
        if (k>n-k)
            k=n-k;

        long b=1;
        for (int i=1, m=n; i<=k; i++, m--)
            b=b*m/i;
        return b;
    }

答案 1 :(得分:3)

您想整体保留您的代码吗? 因为你也可以递归地计算二项式系数,这会将你的函数减少到这4行:

static long binomi(int n, int k) {
        if ((n == k) || (k == 0))
            return 1;
        else
            return binomi(n - 1, k) + binomi(n - 1, k - 1);
    }

答案 2 :(得分:0)

您没有说出您需要哪些系数。如果某些固定N需要C(N,n),则可以转换下面的C代码,它使用一维数组。 在调用之后,C [n]将保持二项式系数C(N,n)为0 <= m <= N,只要N最多为66 - 如果你需要更大的N,你将需要使用积分输入更多位。

static  int64_t*    pascals_triangle( int N)
{
int n,k;
int64_t*    C = calloc( N+1, sizeof *C);
    for( n=0; n<=N; ++n)
    {   C[n] = 1;
        k = n;
        while( --k>0)
        {   C[k] += C[k-1];
        }
    }
    return C;
}
相关问题