求1+2+3+…+n
求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
1、n次调用构造函数,对静态成员进行操作。
2、递归写法,根据&&短路使得递归结束。
3、不要怀疑自己对构造不理解,而是这里他确实有问题,对于已经初始化的静态成员,他变化不可控,因此我们需要在程序中对他再次进行初始化。这可能是他别的原因造成的。
class Sum{
public:
Sum(){
++i;
sum+=i;
}
static int getSum(int n);
private:
static int sum;
static int i;
};
int Sum::sum=0;
int Sum::i=0;
int Sum::getSum(int n){
sum=i=0;
vector<Sum> vs(n);//n次调用构造函数
return sum;
}
class Solution {
public:
int Sum_Solution(int n) {
int res=n;
res&&(res+=Sum_Solution(n-1));//&&短路性质,递归结束
return res;
// return Sum::getSum(n);
}
};
另外的奇思妙想:将计算交给别的函数
char a[n][n+1];//支持不确定下标值
return sizeof(a)>>1;
还有(pow(n,2)+n)>>1求取的。虽然不太符合原意,但是在一定程度上打开了思维。