递归包括两个过程:递推和回归。
一旦递推阶段结束,处理过程就进入回归阶段,在这之前的函数调用以逆序的方式回归。
尾递归
能够大量减少运行时间。
核心在于记录每一次递归后的取值。
以阶乘为例:
int fact(int n) {
if (n == 1 || n == 0) {
return 1;
} else
return n * fact(n - 1);
}
尾递归(储存当前计算值)
int fact(int n, int a) {
if (n == 1) {
return a;
} else if (n == 0) {
return 1;
} else
return fact(n - 1, n * a);
}