退出java.lang.OutOfMemoryError:java中递归函数中的java堆空间错误

退出java.lang.OutOfMemoryError:java中递归函数中的java堆空间错误,java,recursion,Java,Recursion,我在运行这个递归算法时遇到了内存不足的错误,因为我是编程新手。有人能帮我找到错误吗?因为递归对我来说似乎有点难 这个程序的目的是找出和小于或等于给定数的所有子集 package as; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.Scanner; public class NoOfSubsets { static int re

我在运行这个递归算法时遇到了内存不足的错误,因为我是编程新手。有人能帮我找到错误吗?因为递归对我来说似乎有点难

这个程序的目的是找出和小于或等于给定数的所有子集

package as;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Scanner;

public class NoOfSubsets {

    static int result = 0;
    static ArrayList<ArrayList<Integer>> set = new ArrayList<>();

    public static String solve(ArrayList<Integer> A, int B) { // A is the given list of numbers and B is the given number to compare the sum.

        int sum = 0;
        int index = 0;
        Collections.sort(A);
        noOfSubsets(A, B, sum, index, new ArrayList<Integer>());
        System.out.println(set);
        return String.valueOf(set.size());
    }

    public static void noOfSubsets(ArrayList<Integer> A, int B, int sum, int index, ArrayList<Integer> subset) {
        if (sum > B || index > A.size())
            return;
        else if (sum <= B && index == A.size()) {
            System.out.println(subset);
            set.add(subset);
            return;
        }

        noOfSubsets(A, B, sum, index + 1, subset);
        ArrayList<Integer> s = new ArrayList<>(subset);
        s.add(A.get(index));
        noOfSubsets(A, B, sum + A.get(index), index + 1, s);
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        ArrayList<Integer> a = new ArrayList<Integer>();
        int num = sc.nextInt();
        for (int i = 0; i < num; i++) {
            a.add(sc.nextInt());
        }
        int b = sc.nextInt();
        String alist = solve(a, b);
        System.out.println(alist);
    }
}
package-as;
导入java.util.ArrayList;
导入java.util.Collections;
导入java.util.HashSet;
导入java.util.Scanner;
公共类NoOfSubsets{
静态int结果=0;
静态ArrayList集合=新建ArrayList();
publicstaticstringsolve(arraylista,intb){//A是给定的数字列表,B是用于比较和的给定数字。
整数和=0;
int指数=0;
收集.分类(A);
noOfSubsets(A,B,sum,index,new ArrayList());
系统输出打印项次(套);
返回字符串.valueOf(set.size());
}
公共静态void noofsubset(ArrayList A、int B、int sum、int index、ArrayList子集){
如果(总和>B | |索引>A.大小())
返回;

否则如果(求和递归+堆栈溢出或内存不足几乎总是一个失控/无限循环。你试过打印出来,看看会发生什么吗?我通过的测试用例打印得很好,但当我在在线门户中提交此程序时,某个隐藏的测试用例失败,并给我这个内存不足错误,这会很有帮助。)解释你在这里试图做什么,和/或删除注释掉的代码(如果不相关)。我看到了一个合适的基本情况(即使
sum@Pieter12345),你能用a:101010(20乘以10)和B:100试试吗