首页 > 解决方案 > 为什么这个函数会继续运行?

问题描述

我有这个练习,我需要编写一个 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 值分配给它 value false 然后评估 n 值这也是 false 然后程序评估此语句

return p || n;

它也返回 false 但随后又回到 p 值,这次位置值减一。为什么它不应该返回 false 并结束执行?

标签: javafunctionrecursionreturnreturn-value

解决方案


推荐阅读