题目描述
求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
三种方法:
- 递归方法:n==0?0:n+sumNums(n-1);用到了条件语句,因此不符合题目要求,或者另一种版本的递归用到了if 语句也不符合条件。
- for 循环 不符合
- 等差数列公式 用到了乘法也不符合
可以使用的符号有加法,减法,位运算以及逻辑运算。
递归函数的改编需要使用到出口条件,递归出口也就是只满足这一个条件递归结束,可以使用逻辑运算的方法,对于 A&&B 运算,只要A为true,则整个运算式子成立,且不需要判断B。因此可以改变递归的写法如下。
class Solution {
public:
int sumNums(int n) {
int res=n;
n && (res+=sumNums(n-1));
return res;
}
};