不用循环求1+2+3...+n之和的多种求法

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 17:37   2641   0

不用循环求1+2+3...+n之和的多种求法

不用循环求1+2+3...+n之和的多种求法

方法一:递归求解

 
  1. int sum(int n) //用递归求解

  2. {

  3. if (n == 1)

  4. return 1;

  5. else

  6. return sum(n - 1) + n;

  7. }


方法二:模板

通过模板的特化和递归实现

 
  1. template <int x>

  2. struct A

  3. {

  4. static const int value = A < x - 1 >::value + x;

  5. };

  6. template<>

  7. struct A<1>

  8. {

  9. static const int value = 1;

  10. };

  11. int main()

  12. {

  13. cout << A<3>::value << endl;

  14. system("pause");

  15. return 0;

  16. }

注意:类成员变量value必须是ststic静态的!否则无法记录数字之和。

方法三:构造函数

原理:在C++中可以new出一个数组,大小为n,可以通过调用n次构造函数,然后在构造函数里通过静态数据成员来记录n个数之和的大小。

 
  1. class ConSum //用构造函数实现

  2. {

  3. public:

  4. ConSum() //利用创建n个对象来调n次构造函数

  5. {

  6. n++;

  7. sum += n;

  8. }

  9. static int GetSum()

  10. {

  11. return sum;

  12. }

  13. private:

  14. static int n; //用静态数据存储才可达到累加效果

  15. static int sum;

  16. };

  17. int ConSum::n = 0; //初始化静态成员

  18. int ConSum::sum = 0;

  19. int sum_soltion(int n)

  20. {

  21. ConSum *a = new ConSum[n];

  22. return ConSum::GetSum(); //访问静态成员函数必须用域作用符

  23. }

  24. int main()

  25. {

  26. cout<<sum_soltion(3)<<endl;

  27. system("pause");

  28. return 0;

  29. }

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP