Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带| |的递归返回语句_Java_Android - Fatal编程技术网

Java 带| |的递归返回语句

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

以下方法的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 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()不计算

a
return
语句返回值,而不是子句。
|
是一个应用于两个操作数并产生一个值的运算符。那么返回哪个值呢?左边的值还是右边的值?它基于什么?@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的意思是一件事,键入另一件事。更正。