首页 > 其他 > 详细

通俗易懂----尾递归

时间:2016-01-21 19:38:44      阅读:131      评论:0      收藏:0      [点我收藏+]

差距在这:

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

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

 

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

线性递归:

// 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) {

        return (n == 1) ? a : tail(n - 1, a * n);

    }

 

 

junit测试:ps>不要钻牛角尖告诉我超过long型上限为负

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

 

控制台输出:

技术分享

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

通俗易懂----尾递归

原文:http://www.cnblogs.com/andlp/p/5148805.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!