对于逻辑运算符&&
和||
都不陌生,但是利用其短路特性可以作为执行语句的约束条件。以&&
为例,对于A&&B
这个表达式,如果A
表达式返回False,那么A&&B
已经确定为False,那么此时不会再去执行表达式B
。同理,对于逻辑运算符||
,对于表达式A||B
,如果A
表达式返回True,那么A||B
已经确定为True,此时不会再去执行表达式B
。利用这一特性,可以作为一个条件约束,代替if、while等语句。
下面的例题就很好的说明了这一点,题目中明确指出不能使用乘除法,for、while等语句,因此递归出口可以用逻辑运算符的短路特性来实现。
若没有这些条件的限制,很容易写出以下代码:
int sumNums(int n) {
return n == 0 ? 0 : n + sumNums(n - 1);
}
很明显递归出口是n=0,这里采用逻辑运算符的短路特性来实现,&&
和||
都可以实现此功能,表达式B作为主要的功能函数,表达式A则作为递归的出口条件,代码如下:
int sumNums(int n) {
n && (n += sumNums(n-1));
return n;
}
int sumNums(int n) {
n==0 || (n+=sumNums(n-1));
return n;
}