我进行了此练习,我需要编写一个Java函数来找出是否可以仅使用给定数字序列的加法和减法达到零。例如,让我们考虑这些数字5,3,2,4,1,0,3我可以使用加法和减法达到零5 + 3-2-4 + 1 + 0-3 = 0。另一个示例是7 + 3-8 + 5-3-4-0 = 0,该函数应递归工作。给出了解决方案,但我真的不明白它是如何工作的。
public static boolean addCalcExists(int[] values, int position, int result) {
if (position < values.length) {
boolean p = addCalcExists(values, position + 1, result + values[position]);
boolean n = addCalcExists(values, position + 1, result - values[position]);
return p || n;
}
return result == 0;
}
我已经调试了eclipse中的代码,并首先针对布尔值p逐步运行它,该系列的这些数字(5,3,2,4,1,0,3)加起来为18,然后返回该语句被评估
return result == 0;
这显然返回false,然后程序将p值再次赋予p值,将其赋值为false,然后对n值求值,该值也为false,然后程序对该语句求值
return p || n;
也返回false,但随后又返回到p值,这次位置值减1。为什么这样做,不应该重新设置为假并结束执行?