一個遞歸求和的兩種方法


很有意思的兩種實現。

第一種,是程序運行時遞歸求和

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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM