带||的递归返回语句在里面

时间:2014-07-02 17:40:02

标签: java android

以下方法的退货声明让我难过:

public static boolean groupSum(int start, int[] nums, int target, int max) {

        if (start >= nums.length) { return target == 0; }
        // can't use max value
        else if (nums[start] == max) {
          return groupSum(start + 1, nums, target, max);
        }
        else {
            return groupSum(start + 1, nums, target - nums[start], max) ||
                   groupSum(start + 1, nums, target, max);
        }
      }

如果你注意到,return语句有一个|| "或"其中的条款,我对这里返回的条款感到困惑......如果你能解释它是如何工作的,那就太好了。

2 个答案:

答案 0 :(得分:4)

由于||是一个所谓的短流量运算符,因此会计算第一个表达式,当且仅当它的计算结果为true时,才立即返回true,而不评估第二个表达式。如果失败,则评估第二个并返回结果。

所以,如果你有

a() || b()

并且评估为真b()未评估

答案 1 :(得分:2)

||运算符没有选择要返回的表达式,它在两个表达式之间执行逻辑或运算,之后return返回结果。

如果其中一个表达式为return,则true语句将返回true,如果两个表达式均为false,则会返回false