为什么此功能继续运行?

时间:2020-01-23 22:34:09

标签: java function recursion return return-value

我进行了此练习,我需要编写一个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。为什么这样做,不应该重新设置为假并结束执行?

0 个答案:

没有答案