Java 带| |的递归返回语句
以下方法的return语句让我感到困惑:Java 带| |的递归返回语句,java,android,Java,Android,以下方法的return语句让我感到困惑: 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 gro
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语句中有一个| |“or”子句,我不知道这里返回的是哪一个子句。。。如果你能解释一下它是如何工作的,那就太好了。操作符没有选择返回哪个表达式,而是在两个表达式之间执行逻辑OR,然后,
返回
返回结果
如果其中一个表达式为
true
,则return
语句将返回true
,如果两个表达式都为false
,,|
运算符没有选择返回哪个表达式,而是在两个表达式之间执行逻辑OR,然后,return
返回结果
如果其中一个表达式为true
,则return
语句将返回true
,如果两个表达式都为false
,,则该语句将返回false
,因为|
是一个所谓的短curcuit运算符,第一个表达式将被计算,并且仅当其计算结果为true,立即返回true,而不计算第二个值。如果失败,则对第二个进行评估并返回结果
所以如果你有
a() || b()
由于|
是一个所谓的短curcuit运算符,因此不会对计算结果为true的表达式b()进行计算,如果且仅当其计算结果为true时,将立即返回true,而不会对第二个表达式进行计算。如果失败,则对第二个进行评估并返回结果
所以如果你有
a() || b()
a的计算结果为真b()不计算areturn
语句返回值,而不是子句。|
是一个应用于两个操作数并产生一个值的运算符。那么返回哪个值呢?左边的值还是右边的值?它基于什么?@user3730244-结果是两个操作数的比较,而不是任何一个操作数的比较。您知道|
运算符的作用吗?这就是你应该研究的。你应该画递归树。return
语句返回一个值,而不是一个子句。|
是一个应用于两个操作数并产生一个值的运算符。那么返回哪个值呢?左边的值还是右边的值?它基于什么?@user3730244-结果是两个操作数的比较,而不是任何一个操作数的比较。您知道|
运算符的作用吗?这就是你应该研究的。你应该画递归树。如果a的计算结果不是真的,而b的计算结果也不是真的呢?@user3730244那么你得到的是false | | false
。那是什么意思?我不知道false是什么意思。。。该方法会崩溃吗?在短路中,如果第一个为真,则不会递归到groupSum(start+1、nums、target、max)。否则,如果第一个为false。。必须递归以检查它是否返回true或false。如果两者都为假,则评估结果将为假。如果a的评估结果不为真,而b的评估结果也不为真,则会得到false | | false
。那是什么意思?我不知道false是什么意思。。。该方法会崩溃吗?在短路中,如果第一个为真,则不会递归到groupSum(start+1、nums、target、max)。否则,如果第一个为false。。必须递归以检查它是否返回true或false。如果两者都为假,则评估结果将为假。@RichardTingle的意思是一件事,键入另一件事。更正。@RichardTingle的意思是一件事,键入另一件事。更正。