题目描述:
求 1+2+...+n
,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/qiu-12n-lcof/
示例 1:
输入: n = 3
输出: 6
示例 2:
输入: n = 9
输出: 45
解题思路:
不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
那么求和公式用不了,遍历求和也用不了
我们来试一下递归
int sumNums(int n) {
if(n==1) return n;
return n+sumNums(n-1);
}
可以看到递归也是要用到一句if,我们可以看看怎么把这条if去掉
if (n==1) return n;
也就是说如果n==1,需要终止递归,所以我们想到了逻辑与&&连接符。
A&&B,表示如果A成立则执行B,否则如果A不成立,不用执行B
因此我们可以这样。在n>=1的时候,执行递归函数。
代码如下:
class Solution {
public:
int sumNums(int n) {
int res = n;
//当res>=1时,&&语句后面部分执行,直到res=0
//1+2+3+...+n=0+1+2+3+...+n
res&&(res+=sumNums(res-1));
return res;
}
};