很有意思的兩種實現。
第一種,是程序運行時遞歸求和
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 }