不用循环求1+2+3...+n之和的多种求法
方法一:递归求解
int sum(int n) //用递归求解
{
if (n == 1)
return 1;
else
return sum(n - 1) + n;
}
方法二:模板
通过模板的特化和递归实现
template <int x>
struct A
{
static const int value = A < x - 1 >::value + x;
};
template<>
struct A<1>
{
static const int value = 1;
};
int main()
{
cout << A<3>::value << endl;
system("pause");
return 0;
}
注意:类成员变量value必须是ststic静态的!否则无法记录数字之和。
方法三:构造函数
原理:在C++中可以new出一个数组,大小为n,可以通过调用n次构造函数,然后在构造函数里通过静态数据成员来记录n个数之和的大小。
class ConSum //用构造函数实现
{
public:
ConSum() //利用创建n个对象来调n次构造函数
{
n++;
sum += n;
}
static int GetSum()
{
return sum;
}
private:
static int n; //用静态数据存储才可达到累加效果
static int sum;
};
int ConSum::n = 0; //初始化静态成员
int ConSum::sum = 0;
int sum_soltion(int n)
{
ConSum *a = new ConSum[n];
return ConSum::GetSum(); //访问静态成员函数必须用域作用符
}
int main()
{
cout<<sum_soltion(3)<<endl;
system("pause");
return 0;
}