两种递归(以求阶乘为例)
普通递归:
long fun1(int n)
{
if(n==0) return 1;
return n*fun1(n-1);
}
尾递归:
long fun(int n,int a) //a(初始化为1)维护递归次的深度。
{
if(n==0) return 1;
else if(n==1) return a;
else return fun(n-1,n*a);
//递归调用是整个函数体中最后执行的语句且它的返回值不属于表达式的一部分时,这个递归就是尾递归。
}
尾递归的好处
当编译器检测到一个函数调用时尾递归的时候,尾递归就覆盖当前的活跃记录而不是在栈中去创建一个新的栈。