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

时间:2015-05-30 13:15:56

标签: algorithm recursion combinations

我正在尝试使用

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

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数组中的每个数字创建一个递归调用。 但它没有那样工作。

1 个答案:

答案 0 :(得分:2)

这些陈述:

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);
}