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 的描述,讲的也很清楚。

posted @ 2021-04-04 21:51  今天AC了吗  阅读(149)  评论(0)    收藏  举报