题目描述:
求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
示例 1:
输入: n = 3
输出: 6
示例 2:
输入: n = 9
输出: 45
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/qiu-12n-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
这道题很容易想到的解题思路是递归的解法,即每次函数每次返回当前值n与递归下一步的和(n+sumNums(n-1))。你可能会写出下面的代码:
class Solution {
public:int sumNums(int n) {return n+sumNums(n-1);}
};
很明显上面的代码是没有递归终止条件的,也就是说这段代码会一直执行下去。因此我们需要添加一个终止条件,也就是当n==0时,递归结束。进而你可能会想到下面的代码:
class Solution {
public:int sumNums(int n) {return n == 0 ? 0 : n + sumNums(n-1);}
};
再检查一遍题目描述,这道题是不允许使用条件判断语句的,因此上面的代码也不可行。为此,我们还需要再想一下其他的判断方法。我们知道C++中如果a&&b中a为0,那么程序将不再判断b是否为1,进而可以想到将函数的终止条件放到a中,将执行条件放到b中,从而得到下面的代码:
class Solution {
public:int sumNums(int n) {n && (n += sumNums(n-1));//当n!=0时函数继续递归执行,当n==0时,函数返回0,结束递归。return n;}
};