算法与数据结构前端开发那些事儿

递归思想

2020-08-04  本文已影响0人  深度剖析JavaScript

递归就是在函数体内调用本函数
一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
递归注意两点:

例如:写一个方法计算n的阶层

//分析:
// n的阶层=n*(n-1)的阶层,
// (n-1)的阶层=(n-1)*(n-2)的阶层,
// .....
// 一直到
// n=1时或者n=0时得出结果(出口)

//代码如下:
function mul(n){
    if(n==0||n==1){
        return 1;
    }
    return n*mul(n-1);
}
console.log(mul(20));

若使用的是函数表达式时:

var mul = function (n){
    if(n==0||n==1){
        return 1;
    }
    return n*mul(n-1);
}
console.log(mul(20));

也可以使用arguments.callee指代本函数,但注意:在严格模式下不支持使用arguments.callee

function mul(n){
    if(n==0||n==1){
        return 1;
    }
    return n*arguments.callee(n-1);
}

递归的好处:可以让代码变得简洁,大大地减少了程序的代码量
递归的缺点:相对常用的算法如普通循环等,运行效率较低。

因此,应该尽量避免使用递归,除非没有更好的算法或者某种特定情况,递归更为适合的时候。在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出

参考资料:
百度百科:递归
递归,预编译(上)
js递归实现方式

上一篇 下一篇

猜你喜欢

热点阅读