退出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试试吗