CS61A学习杂记01
short_circuit:
在看 CS61A 的 textbook 的时候看到了这个特性,大概是如果考虑表达式 T and a,那么这个表达式的值就和 a 相同,而若考虑表达式 F and a,那么则不需要看 a 的值就可以判断这个表达式的值为 F。同理,若考虑 T or a,那么 a 的值不用看,就可以算出整个表达式的值为 T,若是考虑 F or a,那么整个表达式的值就和 a 相同。这看似是很显然,没什么用的事实,但是有时候也有很精巧的用途,比如实现递归。
我记得今年寒假在学 C++ 的时候做到这样一题:
求 1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、 case 等关键字及条件判断语句 (A?B:C)。
这是《剑指Offer》上面的一道题。
https://www.acwing.com/problem/content/80/
最后的解答就是用 short_circuit 特性来递归,求这个 sum。
代码
class Solution {
public:
int getSum(int n) {
int ret=n;
n>0&&(ret+=getSum(n-1));//利用short_circuit,若n<=0则不会在执行&&后面的操作
return ret;
}
};
下面是 CS61A 的 textbook 对 short circuit 的描述,讲的也很清楚。


浙公网安备 33010602011771号