差距在这:
线性递归:计算到头之后还要再回溯一遍 (相当于运算了两遍)
尾递归 :计算到头就得到结果,不回溯 (就运算一遍)
看代码,简单求阶乘公式:
线性递归:
// Line recursion 线性递归
public int line(int n) {
if (n == 1) { return 1; }
return n * line(n - 1);
}
尾递归:
// Tail recursion 尾递归
public int tail(int n, int a) {
if(n==1){return a}
return tail(n - 1, a * n);
}