C++模板递归深度的思考

来源:互联网 发布:淘宝优惠券在哪里看 编辑:程序博客网 时间:2024/06/05 13:23
#include <iostream>using namespace std;template<int N>class A{public:    enum{ result = N + A<N - 1>::result};};template<>class A<1>{public:    enum{result=1};};int main(){    cout << A<500>::result << endl;    //vs2013下面最多只能递归500的深度。    //因为在编译阶段的递归深度是由限制的,不同的操作系统也不太一样,    //但是总的来说都不会太大。    return 0;}
#include<iostream>using namespace std;template<int N,int M>class A{public:    enum{ mid = (N+M) /2};    static const int result = M+ A<N, mid>::result+A<mid,M-1>::result;    //这里运用了二分法大大的减少了递归的深度。    //哈哈,这里任意大的数字都不会报错了,因为这里类似于完全二叉树的形式    //递归下去,深度减少,运算的数字可以很大,只不过花费的时间比较多,像    //我用20000来测试,大概等了30秒钟。我劝大家不要测试太大的数字,虽然    //不会报错,但是对资源消耗的过多会使电脑卡死,我卡死2次,用200000测试的。};template<int M>class A<M,M>{public:    static const int result = 0;};int main(){    cout << A<0, 10000>::result << endl;    return 0;}

这里写图片描述

1 0
原创粉丝点击