一个递归求和的两种方法

很有意思的两种实现。

第一种,是程序运行时递归求和

1 int Sum(int n)
2 {
3     int tmp = 0;
4     (!!n) && (tmp = Sum(n-1));
5 
6     return tmp + n;
7 }

第二种,程序编译时递归编译求和

 1 template <int n>
 2 class CalNum {
 3 public:
 4     enum Value {
 5         N = CalNum<n-1>::N + n,
 6     };
 7 };
 8 
 9 template<>
10 class CalNum<1> {
11 public:
12     enum Value {
13         N = 1,
14     };
15 };

在cygwin下测试通过,例子:

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 int main(void)
 6 {
 7     cout << "Hello World!\n";
 8     cout << CalNum<100>::N << endl;
 9     cout << Sum(100) << endl;
10 
11     return 0;
12 }

 

posted @ 2012-12-24 17:01  Jojodru  阅读(5911)  评论(0编辑  收藏  举报