#include
using namespace std;
template
class A
{
public:
enum{ result = N + A::result};
};
template<>
class A<1>
{
public:
enum{result=1};
};
int main()
{
cout << A<500>::result << endl;
//vs2013下面最多只能遞歸500的深度。
//因為在編譯階段的遞歸深度是由限制的,不同的操作系統也不太一樣,
//但是總的來說都不會太大。
return 0;
}
#include
using namespace std;
template
class A
{
public:
enum{ mid = (N+M) /2};
static const int result = M+ A::result+A::result;
//這裡運用了二分法大大的減少了遞歸的深度。
//哈哈,這裡任意大的數字都不會報錯了,因為這裡類似於完全二叉樹的形式
//遞歸下去,深度減少,運算的數字可以很大,只不過花費的時間比較多,像
//我用20000來測試,大概等了30秒鐘。我勸大家不要測試太大的數字,雖然
//不會報錯,但是對資源消耗的過多會使電腦卡死,我卡死2次,用200000測試的。
};
template
class A
{
public:
static const int result = 0;
};
int main()
{
cout << A<0, 10000>::result << endl;
return 0;
}