Java递归例程
我正在实现一个递归例程来计算多项式表达式的所有项,基本上是多项式展开式。我认为这会转化为一个问题,大致如下- 给定一组n个数,其值范围为[0,1,2,…n],可实现k和的最大组合数是多少 下面是递归例程-Java递归例程,java,recursion,Java,Recursion,我正在实现一个递归例程来计算多项式表达式的所有项,基本上是多项式展开式。我认为这会转化为一个问题,大致如下- 给定一组n个数,其值范围为[0,1,2,…n],可实现k和的最大组合数是多少 下面是递归例程- public static String []multinomial_elements; public static void multichoose(int n,int k) { String[] result = null; System.out.print("Callin
public static String []multinomial_elements;
public static void multichoose(int n,int k)
{
String[] result = null;
System.out.print("Calling multichoose with");
System.out.println(" "+Integer.toString(n)+" "+Integer.toString(k));
if(n==1)
{
multinomial_elements[result_iter]=multinomial_elements[result_iter]+Integer.toString(k)+"|";
++result_iter;
}
else
{
if(k==0)
{
result=new String[1];
result[0]="0";
for(int a=0;a<n;a++)
multinomial_elements[result_iter]=multinomial_elements[result_iter]+"0"+"|";
++result_iter;
}
else
{
for(int firstindexval=k;firstindexval>=0;firstindexval--)
for(int iter=0;iter<=k-firstindexval;iter++)
{
if(iter+firstindexval==k){
multinomial_elements[result_iter]=multinomial_elements[result_iter]+Integer.toString(firstindexval)+"|";
multichoose(n-1,iter);
}
}
}
}
}
任何关于我做错了什么的指点或暗示都会大有帮助
谢谢
p1ng您的例程的目的似乎是,给定k的总和和n个项的总数,找到填充n个项的所有排列,其值介于0和k之间(包括)。我假设这意味着,对于n=3,k=3的情况,你需要
3|0|0|
2|0|1|
2|1|0|
1|0|2|
1|1|1|
1|2|0|
0|0|3|
0|1|2|
0|2|1|
0|3|0|
然而,您的代码有点随意。特别是,循环forint iter=0;Itery您的代码似乎没有按照您的描述所建议的那样执行。您能否提供一个简单的示例,说明您期望的输出是什么以及为什么?应该选择什么3、3;计算
3|0|0|
2|0|1|
2|1|0|
1|0|2|
1|1|1|
1|2|0|
0|0|3|
0|1|2|
0|2|1|
0|3|0|
public static void multichoose(int n,int k, String currentSolution /* NEW ARGUMENT */)
{
// String[] result = null; /* UNNECESSARY */
System.out.print("Calling multichoose with");
System.out.println(" "+Integer.toString(n)+" "+Integer.toString(k));
if(n==1)
{
// multinomial_elements[result_iter]=multinomial_elements[result_iter]+Integer.toString(k)+"|";
multinomial_elements[result_iter]=currentSolution+k+"|"; /* CHANGED */
++result_iter;
}
else
{
if(k==0)
{
// result=new String[1]; /* UNNECESSARY */
// result[0]="0"; /* UNNECESSARY */
for(int a=0;a<n;a++)
// multinomial_elements[result_iter]=multinomial_elements[result_iter]+"0"+"|";
currentSolution += "0|"; /* CHANGED */
multinomial_elements[result_iter] = currentSolution; /* NEW */
++result_iter;
}
else
{
for(int firstindexval=k;firstindexval>=0;firstindexval--)
//for(int iter=0;iter<=k-firstindexval;iter++) /* UNNECESSARY */
//{ /* UNNECESSARY */
//if(iter+firstindexval==k){ /* UNNECESSARY */
//multinomial_elements[result_iter]=multinomial_elements[result_iter]+Integer.toString(firstindexval)+"|"; /* SEE CHANGE BELOW */
//multichoose(n-1,iter);
multichoose(n-1, k-firstindexval /* CHANGED */, currentSolution+firstindexval+"|" /* NEW ARGUMENT */); /* CHANGED */
//} /* UNNECESSARY */
//} /* UNNECESSARY */
}
}
}