js求Fibonacci第n项,暴力版和缓存版

119 阅读1分钟

暴力版

暴力版在求大概47项就会明显感觉到慢。

function fib(n) {
    return n<2?
        n : fib(n-1) + fib(n-2)
}

缓存版

思路

递归求Fibonacci第n项时都会先求其前面的项,存在大量的重复计算,我们将已经计算出来的Fibonacci数缓存起来,每次递归之前判断项Fibonacci数是否已经计算过。 由于用js实现,我这里用的数组缓存。

代码

function fib1(n,arr=[]) {
    if(n<2) return n
    if(!arr[n]) {
        arr[n] = fib1(n-1,arr)+ fib1(n-2,arr)
    }
    return arr[n]
}