面试小白的我深深地发出了疑问,面试的时候真的会有这样的题吗…
题目描述
求 1+2+...+n
,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
示例 1:
输入: n = 3
输出: 6
示例 2:
输入: n = 9
输出: 45
限制:
1 <= n <= 10000
解题思路
1. 等差数列求和
首先可以想到利用n * (n + 1) / 2
的递归公式进行求解,然而本题不让使用乘除法,此方法暂不考虑。
2. 利用递归求解
利用递归时需要判断跳出递归的条件,本题不让用if、for
等常用的语句,因此我们需要另想办法。
本题要求当n递减到0时跳出循环,因此可用n != 0
进行判断,再利用逻辑运算符&&
,通过短路效应使循环跳出。
具体思路可参考代码及注释。
完整代码
- 等差数列求和(不满足题意)
class Solution {
public:
int sumNums(int n) {
//等差数列求和
return n*(n+1)/2;
}
};
- 利用递归求解(通过测试)
class Solution {
public:
int sumNums(int n) {
// 如果n为0,则跳出递归循环,不会再继续执行。
n != 0 && (n += sumNums(n-1));
return n;
}
};