Javascript 递归函数

作者: Sue1024 | 来源:发表于2018-03-11 14:46 被阅读14次

当一个函数在执行时调用了自身,那么这个函数就是递归函数。递归函数经常用来解决一些循环反复的问题。我们首先列举一些递归函数的使用场景。

使用场景

阶乘

如果我们要求得 1*2*3*4*5*6 的结果,可以构造一个如下函数:

function factorial(n) {
    if(n === 1) return 1;
    return n*factorial(n-1);
}
factorial(6); //720    

斐波拉契数列

一只兔子,从出生起第三个月会生一只兔子,求第n月的兔子总数。每个月的兔子总数数列大概是这个样子:

1 1 1+1(2) 2+1(3) 3+2(5) 5+3(8) ...

即每个月兔子的总数为:
上个月兔子总数+上上个月兔子总数(在本月具有生育能力)
基于上述逻辑,可以构造如下函数:

function func( n )
{
    if (n == 0 || n == 1) return 1;
    return func(n-1) + func(n-2);
}
func(10);
//89

递归函数的性能问题

递归函数虽然看起来精简又巧妙,但却存在着比较明显的性能问题,为了比较,我们基于第二个例子,再构建一个使用循环语句实现的方法:

function func(n)
{
    var array = [1,1];
    var count = 0;
    var sum = 0;
    if (n === 0 || n ===1) return 1;
    while(count<n-1) {
        array.push(array[count] + array[++count]);
    }
    return array[array.length-1]
}
func(10); //89

很显然上述方法的时间复杂度为n,我们为第二个例子中的递归函数添加一个计数变量:

var count = 0
function func( n )
{
    count++;
    if (n == 0 || n == 1) return 1;
    return func(n-1) + func(n-2);
}
func(10);
count; //177

时间复杂度接近于2n2

相关文章

  • 前端算法学习-前篇

    递归 JavaScript中允许函数递归调用,示例: 当一个函数呗递归调用时,递归没有完成,函数的计算结果会被暂时...

  • JavaScript递归函数

    JavaScript 支持函数的递归调用。 所谓递归函数,就是在函数体内调用函数本身。 使用递归函数的一个常见例子...

  • Javascript 递归函数

    当一个函数在执行时调用了自身,那么这个函数就是递归函数。递归函数经常用来解决一些循环反复的问题。我们首先列举一些递...

  • javascript基础函数

    获取url参数 JavaScript加载样式文件 匹配多个转行的空格 递归函数 列队递归函数 获取对象的样式 给元...

  • Javascript的函数递归

    递归是什么? 想个标题已经让我很纠结了,究竟是函数递归还是递归函数? 看了下MDN的说明是:** 函数可以被递归,...

  • JavaScript函数之递归

    JS函数 从本篇文章开始,我们将继续回到JavaScript函数的学习。在学JS基础时我们初步学习了函数,讲解了函...

  • 2018-06-06

    JavaScript中的递归 最简单的一句话介绍递归:函数内部自己调用自己 小递归案例: 计算 1+2+3+......

  • JavaScript之递归

    递归基础 什么是递归?在JavaScript程序中,函数直接或间接调用自己。通过某个条件判断跳出结构,得出结果。递...

  • web前端学习中JavaScript常见函数的那些技巧实现

    在学习JavaScript,或者前端面试中,有人会问你节流函数、防抖函数、递归函数等,本文分享了5个常见函数,希望...

  • 通过递归,计算斐波那契数列的代码

    出处 函数 - JavaScript 教程 - 网道 ---- 圆括号运算符,return 语句和递归 代码 上面...

网友评论

    本文标题:Javascript 递归函数

    本文链接:https://www.haomeiwen.com/subject/vjbbfftx.html