通俗易懂----尾递归

差距在这:

线性递归:计算到头之后还要再回溯一遍 (相当于运算了两遍)

尾递归 :计算到头就得到结果,不回溯  (就运算一遍)

看代码,简单求阶乘公式:

线性递归:

// 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);       
    }

  

junit测试:

public void test() throws Exception {

        Assert.assertEquals(362880, line(9));
        Assert.assertEquals(362880, tail(9,1));
    
        Log.e("test", "line:" + line(9));
        Log.e("test", "tail:" + tail(9, 1));
    
    }

控制台输出:

 其实递归思想很有艺术,简约而不简单.....

原文地址:https://www.cnblogs.com/andlp/p/5148805.html