不用循环求1+2+3...+n之和的多种求法
不用循环求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; -
}
|