给定分数列表的所有分数组合

All combination of score for a given score list

我正在尝试使用

获得给定分数的所有分数组合

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 output 111 12 21 3

我得到的是

111 12

根据我的理解,循环将为分数数组中的每个数字创建一个递归调用。 但它不是那样工作的。

有了这些陈述:

x = x -score[i];
// ...
index++;

您更改了局部变量 xindex,这意味着它们在随后的循环中将有错误的值。但是您只想在下一个递归实例中更改它们,即在您要调用的函数中:

for (int i = 0; i < score.length; i++) {
    ans[index] = score[i];
    FindCombination(score, x - score[i], ans, index + 1);
}