一个递归求和的两种方法
很有意思的两种实现。
第一种,是程序运行时递归求和
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 }