编写函数求1+2+...+n的和,要求不能使用乘除、if-else、for、while、switch和三目运算符
思路:
- 如果能用乘除的话,直接用求和公式就解了,但是这里不给用。不能用循环,能不能用递归呢?递归不就是自己循环调用自己吗,考虑用递归,但是递归需要用if做终止条件,似乎不行。但是我们可以利用逻辑判断的短路特性间接实现递归的出口条件。
- 另一种解法是搭配使用静态变量和构造函数。我们知道每次创建一个对象,都自动调用一次构造函数。因此可以在构造函数里计数并累加和。
int Sum(int n)
{
int i = 0;
(n>1)&&(i = Sum(n-1)+n);// &&短路性质
return i;
}
// *************************** //
class SumClass
{
private:
static int i;
static int sum;
public:
SumClass(){i++; sum += i;}
static int getSum(){return sum;}
}
int SumClass::i = 0;
int SumClass::sum = 0;
int Sum(int n)
{
Sum* p = new Sum[n];
int s = SumClass::getSum();
delete[] p;
p = NULL;
return s;
}
网友评论