题目描述
求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
参考思路
思路一
第一种可以使用公式法。由于这是一个等差数列,因此求和公式为sum = (n+1)n/2
其中n*n可以用Math.pow(n,2)来实现,而除以2则可以用位运算右移一位来实现。
public class Solution {
public int Sum_Solution(int n) {
return ((int)(Math.pow(n,2)+n)) >> 1;
}
}
思路二
第二种利用&&的短路特性以及递归来实现求和。&&短路特性指如果等式左边不成立则右边不再执行。加上迭代函数递归直到最后n==0,则回溯。以下是C++代码
class Solution {
public:
int Sum_Solution(int n) {
int sum=n;
sum && (sum+=Sum_Solution(n-1));
return sum;
}
};