我正在尝试使用
获得给定分数的所有积分组合recurssion
这是我的代码段
public class CombinationForGivenScore {
public static void FindCombination(int score[],int x,int ans[],int index){
if(x == 0){
for(int i = 0;i<index;i++){
System.out.print(ans[i]);
}
System.out.println();
}
else if(x>0){
for(int i =0;i<score.length;i++){
x = x -score[i];
ans[index] = score[i];
index++;
FindCombination(score, x, ans, index);
}
}
}
public static void main(String args[])throws Exception{
int score[] = {1,2,3}; // valid score
int ans[] = new int[100]; // just a large array to store the combination
int index = 0; // index for the ans array
int x = 3; // total score
FindCombination(score, x, ans, index);
}
}
我期待这个结果
x = 3输出111 12 21 3
我得到的是
111 12
根据我的理解,循环将为score数组中的每个数字创建一个递归调用。 但它没有那样工作。
答案 0 :(得分:2)
这些陈述:
x = x -score[i];
// ...
index++;
您更改了局部变量x
和index
,这意味着它们在后续循环中会有错误的值。但是你只想在下一个递归实例中更改它们,即在你要调用的函数中:
for (int i = 0; i < score.length; i++) {
ans[index] = score[i];
FindCombination(score, x - score[i], ans, index + 1);
}