我實現了一個遞歸例程來計算多項式表達式的所有項,基本上是一個多項式展開式。我認爲這可以轉化爲以下幾條問題: -Java遞歸例程疑問
給定一組值爲[0,1,2,... n]的n個數組是多少這可以實現k的總和。
以下是遞歸例程 -
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);
}
}
}
}
}
multinomial_elements如果將包含1個條目來回膨脹的每個術語陣列。上述代碼背後的基本思想是,從第一項的最大可能值(功率),我迭代到它的最低可能值(功率),並且通過這樣做遞歸地對其他項應用相同的邏輯。 從表示函數調用的打印語句中,我能夠推斷出我能夠以正確的方式看到Im遍歷樹。然而輸出看起來不穩定。我似乎在將'firstindexval'添加到數組multinomial_terms的地方搞亂了。這似乎發生在Im在處理較低節點之後返回到較高節點並因此程序不再具有「firstindexval」意義的情況下發生。這個推論是基於如下輸出 -
multichoose(3, 3);
3|0|0|
2|1|0|
0|1|
1|2|0|
1|1|
0|2|
0|3|0|
2|1|
1|2|
0|3|
任何指針或提示我什麼我做錯了會有很大的幫助。
感謝 p1ng
您的代碼似乎沒有按照您的描述所暗示的那樣進行。你能提供一個簡單的例子,說明你期望輸出是什麼,爲什麼?什麼應該「multichoose(3,3);`計算? – Tim 2011-02-08 04:04:15