以下方法的退货声明让我难过:
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语句有一个|| "或"其中的条款,我对这里返回的条款感到困惑......如果你能解释它是如何工作的,那就太好了。
答案 0 :(得分:4)
由于||
是一个所谓的短流量运算符,因此会计算第一个表达式,当且仅当它的计算结果为true时,才立即返回true,而不评估第二个表达式。如果失败,则评估第二个并返回结果。
所以,如果你有
a() || b()
并且评估为真b()未评估
答案 1 :(得分:2)
||
运算符没有选择要返回的表达式,它在两个表达式之间执行逻辑或运算,之后return
返回结果。
如果其中一个表达式为return
,则true
语句将返回true
,如果两个表达式均为false
,则会返回false
。