这是代码:
数组初始化
int candy = new int[ratings.length];
for循环
for (int i=0;i<ratings.length;i++){
count += calculate(i);
}
计算方法
public int calculate(int num){
if (candy[num] != 0){ //the kid's candy number has already been calculated
return candy[num];
} else if (type(num) == 1){ //type A
candy[num]=1; //store it in the array, save time for re-calculate
return 1;
} else if (type(num) == 2){ //type B
candy[num] = calculate(num+1)+1;
return candy[num];
} else if (type(num) == 3){ //type C
candy[num] = calculate(num-1)+1;
return candy[num];
} else if (type(num) == 4){ //type D
candy[num] = max(calculate(num-1)+1, calculate(num+1)+1);
return candy[num];
}
return 0; //should never reach here
}
我在for循环中使用此计算方法,从1-12000迭代num,然后我得到了java.lang.StackOverflowError。
然后我从
更改代码 candy[num] = calculate(num+1)+1;
return candy[num];
到
int value1 = calculate(num+1)+1;
candy[num] = value1;
return value1;
没有错误。我不知道为什么?请帮帮我。
答案 0 :(得分:2)
你有一个递归循环。 calculate
方法在几个地方使用基于num
的参数调用自身。如果逻辑不正确,您最终会得到一个无限递归循环。在Java中将产生StackOverflowError
。
目前尚不清楚为什么会发生这种情况,因为您尚未提供所有相关代码。但是不要!你应该能够自己调试这个。
您需要在IDE中使用调试器。
calculate
方法type
正在返回的内容