理解尾递归

递归的一般形式
int fun(int n){ if(n==0) return 0; return n+fun(n-1); }
数学模型:

n=0 0

n!=0 f(n)


尾递归的一般形式
int fun(int sum,int n){ if(n==0) return sum; return fun(sum+n,n-1); }

 

两种递归的形式对比:

递归:f(n),返回值会被调用者使用

尾递归:f(m,n),返回值不会被调用者使用

两种递归的深入的对比:

尾递归由于直接返回值,不需要保存临时变量,所以性能不会产生线性增加。并且编译器会将尾递归形式优化成非递归形式。



你可能感兴趣的:(优化,编译器,fun)