Java 求迭代形式二项式系数的代码
我已经编写了以递归形式查找二项式系数的代码:Java 求迭代形式二项式系数的代码,java,recursion,iteration,binomial-coefficients,Java,Recursion,Iteration,Binomial Coefficients,我已经编写了以递归形式查找二项式系数的代码: public int binom(int n, int k) { if (k==n || k==0) return 1; else return binom(n-1,k-1) + binom(n-1, k); } 如何以迭代形式而不是递归形式重写此代码?public int-binom(int-n,int-k) public int binom(int n, int k) { int C[][
public int binom(int n, int k)
{
if (k==n || k==0)
return 1;
else return binom(n-1,k-1) + binom(n-1, k);
}
如何以迭代形式而不是递归形式重写此代码?public int-binom(int-n,int-k)
public int binom(int n, int k)
{
int C[][] = new int[n+1][k+1];
int i, j;
int min;
// Caculate value of Binomial Coefficient in bottom up manner
for (i = 0; i <= n; i++)
{
min = (i<k)? i: k;
for (j = 0; j <= min; j++)
{
// Base Cases
if (j == 0 || j == i)
C[i][j] = 1;
// Calculate value using previosly stored values
else
C[i][j] = C[i-1][j-1] + C[i-1][j];
}
}
return C[n][k];
}
{
整数C[][]=新整数[n+1][k+1];
int i,j;
int-min;
//自下而上计算二项式系数的值
对于(i=0;i而不是将整个Pascal三角形构建到第n行(内存使用量随n的平方增长),我们可以只关注行本身,并使用恒定内存
让我们找出帕斯卡三角形上同一行上连续项之间的关系:
因此,我们可以从nC0=1迭代生成术语:
publicstaticintbinom(intn,intk)
{
int值=1;
//这里需要小心-由于整数除法,不能只使用*=
for(int i=0;i
这很容易通过浏览器搜索找到。k!(n-k)!/n!但我想特别避免使用公式(n,k)=n!/k!(n-k)!。我想使用公式(n,k)=(n-1,k-1)+(n-1,k)取而代之。这可能吗?在这里检查我的理解:您想要递归公式的迭代实现。@nagendra547的链接为您提供了它。明白了。谢谢。我将回答我自己的问题。
public static int binom(int n, int k)
{
int value = 1;
// need to be careful here - can't just use *= due to integer division
for (int i = 0; i < k; i++)
value = (value * (n - i)) / (i + 1);
return value;
}