一、先普及下尾递归:如果一个函数中所有递归形式的调用都出现在函数的末尾,我们称这个递归函数是尾递归的。当递归调用是整个函数体中最后执行的语句且它的返回值不属于表达式的一部分时,这个递归调用就是尾递归。尾递归函数的特点是在回归过程中不用做任何操作,这个特性很重要,因为大多数现代的编译器会利用这种特点自动生成优化的代码。
二、实例展示:尾递归实现斐波那契数
long long fib(int n,long long a,long long b) //尾递归-斐波那契数
{
if (n<3)
{
return b;
}
else
return fib(n-1,b,a+b);
}
解释:递归在结尾处,当编译器进行优化时每次调用时不用开辟新的栈针,某种程度上可以看做是迭代,这样大大节降低了空间空间复杂度和时间复杂度。