Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
子集和递归Java_Java_Recursion_Sum_Subset - Fatal编程技术网

子集和递归Java

子集和递归Java,java,recursion,sum,subset,Java,Recursion,Sum,Subset,对不起,我很傻,但你能用简单的英语向我解释一下最后的递归行吗 public static void find(int[] A, int currSum, int index, int sum, int[] solution) { if (currSum == sum) { System.out.println("\nSum found"); for (int i = 0; i < solution.length; i++) {

对不起,我很傻,但你能用简单的英语向我解释一下最后的递归行吗

public static void find(int[] A, int currSum, int index, int sum,
        int[] solution) {
    if (currSum == sum) {
        System.out.println("\nSum found");
        for (int i = 0; i < solution.length; i++) {
            if (solution[i] == 1) {
                System.out.print("  " + A[i]);
            }
        }

    } else if (index == A.length) {
        return;
    } else {
        solution[index] = 1;// select the element
        currSum += A[index];
        find(A, currSum, index + 1, sum, solution);
        currSum -= A[index];    
        solution[index] = 0;// do not select the element
        find(A, currSum, index + 1, sum, solution);
    }
    return;
}
公共静态void find(int[]A,int currSum,int index,int sum,
int[]解决方案){
如果(currSum==总和){
System.out.println(“\nSum-found”);
for(int i=0;i
据我所知,第一个递归将所有的数字相加到13。在它将最后一个索引(本例中为4)标记为0并从总和中减去之后

在那之后,对我来说雾很大


提前谢谢

如果我们看这个例子:
A=[1,2,3],sum=3

  • 第一个递归将发现索引0和1的总和为3。因此,它们将被打印出来。这个递归将继续到另一个递归,但是curSum将是3,所以我们将从它返回
    currSum-=A[index]
    将从currSum减少2(因为A[1]=2)。原因是您希望检查第一个元素(索引为零)和第三个元素(如果没有第二个元素,它们的总和可能都是3)。您也在执行
    解决方案[index]=0
    ,因为您希望忽略打印中的[1]。最后一件事是代码中的“第二”递归(但不是按执行顺序)
    find(A,1,1+1,3,解决方案)并继续此逻辑
试着用一个简单、小且相关的例子来做。就像我这里的例子一样。把它写在纸上,自己“输入”所有的递归。把它画成一棵树,每次看到return语句时,就在树上画


希望它能对您有所帮助(它也能说服您,为什么有这么多的工作可以通过使用动态规划来消除)。

欢迎使用so。请发布代码,不要链接到代码。看:我很抱歉,我只是急于想找到答案。再次为错误理解感到抱歉。问题中缺少一些信息:“将所有数字加起来等于13”-你在哪里看到13?“它标记了最后一个索引(本例中为4)”-再次说明,4基于什么?非常感谢您将其写下来!我会按照你告诉我的去做。祝你过得愉快@minihulk22太棒了!请随时提出更多问题。