javascript中常见的简单算法题

版权声明:转载需注明出处 https://blog.csdn.net/samfung09/article/details/80934449

1、斐波那契数列(1,1,2,3,5,8,13,21...)

最简单的实现

function f1(n){
    // i++;     //判断递归次数
    if(n <= 2) return 1;
    return f1(n-1) + f1(n-2);
}

这是最简单的实现,但我们知道递归次数多了非常耗内存,对性能总是不好的。所以可以用其他方法实现

function f2(n){
    var cache = [1,1,1];
    function _fn(n){
        // i++;     //判断递归次数
        if(cache[n]) return cache[n];
        cache[n-1] = _fn(n-1);
        cache[n-2] = _fn(n-2);
        return cache[n-1] + cache[n-2];
    }
    return _fn(n);
}

该方法主要是将取过的值缓存(这里是用一个数组)起来,这样再读取该值时直接从缓存中拿到就可以了,从而省去了一部分递归。以上两种方法在传入的n数值小的时候还好,如果n的值稍大一点,第一种方法会直接崩溃。下面是两者的一些执行性能上的差异,当n=40时

console.log(f1(40), i, Date.now()-t)    //值为102334155,递归次数204668309,耗时2112ms
console.log(f2(40), i, Date.now()-t)    //值为102334155,递归次数77,耗时7ms

猜你喜欢

转载自blog.csdn.net/samfung09/article/details/80934449