今天听别人说,递归函数递归太深会栈溢出,所以推荐用模板递归。但我不明白,模板递归就不会栈溢出吗?只要嵌套调的函数足够多,不都会栈溢出?
比如 int func1(int n){
if(n==1)
return n;
return n+func(n-1);}
template<int n>
int func2(){
return n+func<n-1>();}
template<>
int func2<1>()
{
return 1;
}
问题来了:
1、假设调用func1(100000)会栈溢出,那么,难道调用func2<100000>()就不会栈溢出吗?
2、对于效率问题,我觉得用模板反而低一些,因为对于func1(100),只会产生一个函数实例,并嵌套调100次。而对于func2<100>(),会产生100个函数实例,对每个实例分别调一次,如果是这样,并没有什么效率提升,反而还增大了内存消耗。我这样理解是否正确?
比如 int func1(int n){
if(n==1)
return n;
return n+func(n-1);}
template<int n>
int func2(){
return n+func<n-1>();}
template<>
int func2<1>()
{
return 1;
}
问题来了:
1、假设调用func1(100000)会栈溢出,那么,难道调用func2<100000>()就不会栈溢出吗?
2、对于效率问题,我觉得用模板反而低一些,因为对于func1(100),只会产生一个函数实例,并嵌套调100次。而对于func2<100>(),会产生100个函数实例,对每个实例分别调一次,如果是这样,并没有什么效率提升,反而还增大了内存消耗。我这样理解是否正确?