一个递归求和的两种方法


很有意思的两种实现。

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

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