思路:
这道题有很多种做法,有一种奇葩的做法就是下面代码中注释的那种,通过申请一个数组来计算即可。
知识点:
常见的逻辑运算符有三种,即 “与 && ”,“或 || ”,“非 ! ” ;而其有重要的短路效应,如下所示:
-
if(A && B) // 若 A 为 false ,则 B 的判断不会执行(即短路),直接判定 A && B 为 false
-
if(A || B) // 若 A 为 true ,则 B 的判断不会执行(即短路),直接判定 A || B 为 true
然后我们想想跟简单的if语句是不是可以替换呢?
我用&&的短路效应来代替if语句的作用,是不是可以的?当我A&&B时,通过前面A的真假性来控制递归的层次即可。
代码:
class Solution {
public:
// int sumNums(int n) {
// bool a[n][n+1];
// return sizeof(a)>>1;
// }
//ans=1+2+3+...+n
// =(1+n)*n/2
// =sizeof(bool a[n][n+1])/2
// =sizeof(a)>>1
int sumNums(int n){
bool x = n>1 && sumNums(n-1)>0;
res+=n;
return res;
}
private:
int res = 0;
};