题目描述
求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
方法一:构造函数求阶乘
设置一个静态变量N和sum,在构造函数中进行累加运算;
然后构造一个以辅助类为类型、大小为n的数组,重复调用此构造函数n次来实现n次的累加运算
class temp
{
public:
static void reset(){i=0;sum=0;}
static unsigned int GetSum(){return sum;}
temp()
{
++i;
sum += i;
}
private:
static int sum;
static int i;
};
int temp::sum = 0;
int temp::i = 0;
class Solution {
public:
int Sum_Solution(int n) {
temp::reset();
temp* p = new temp[n];
delete[]p;
p=NULL;
return temp::GetSum();
}
};
方法二:短路计算法
使用短路计算来构造递归:重点是输入0的时候输出0来结束递归
缺点:递归的层数不能太深<3000
class Solution {
public:
int Sum_Solution(int n) {
int ret = n;
n && (ret += Sum_Solution(n-1));
return ret;
}
};