【发布时间】:2015-09-08 14:11:16
【问题描述】:
我错过了什么?我有我的基本情况,看起来“左侧”运行没有问题,但是当右侧执行时出现错误。我对递归还很陌生,我确信答案很明显,但我似乎找不到。
基本上,我有一个列表,我试图查看该列表中有多少子集,添加时等于常数 D。我正在使用具有真值和假值的 ArrayList 创建决策树,然后使用该列表使用“test”,一个全局 ArrayList 来查找总和。
public void recSubSetSum(ArrayList<Boolean> subSetList){
if(calcSumOfList(subSetList) == D)
subsetsFound++;
else if(calcSumOfList(subSetList) < D){
for (int i = 0; i < test.size(); i++) {
ArrayList leftList = new ArrayList<>();
copyList(leftList, subSetList);
leftList.add(true);
if(calcSumOfList(leftList) < D)
recSubSetSum(leftList);
ArrayList rightList = new ArrayList<>();
copyList(rightList, subSetList);
rightList.add(false);
if(calcSumOfList(rightList) < D)
recSubSetSum(rightList); //this is where the error occurs
}//for
}//else
else{
subsetsNotFound++;
}
}
public int calcSumOfList(ArrayList<Boolean> boolList){
int sum = 0;
int j =0; //I used j because it was giving me a outOfBoundsException when I uses i
for (int i = 0; i < boolList.size(); i++) {
if(boolList.get(i) == true){
sum+= test.get(j);
j++;
}
}//for
return sum;
}//calc sum of list
提前致谢!
【问题讨论】:
-
当应用程序递归太深时抛出StackOverflowError,请仔细验证您的循环。
-
您正在检查
< D,但它应该是> D,就在注释行之前。
标签: java recursion stack-overflow decision-tree