递归算法-输出斐波那契数列的前10项 即 1,1,2,3,5,8,13,21,34,55

159 阅读1分钟

试着输出斐波那契数列的前10项 即 1,1,2,3,5,8,13,21,34,55 然后思考代码是否有重复计算,应该如何解决重复计算的问题

这个题目的解法规律是 fib(n) = fib(n-1) + fib(n-2)

按照这个思路编写代码

function fib (n) {
    if (n==0 || n==1) return 1
    return fib(n-1)+fib(n-2)
}
for (let i=0;i<10;i++) {
    console.log(fib(i))
}

是否有重复计算的问题 有重复计算,每次用到的时候都会去计算

function fib (n) {
    console.count();
    if (n==0 || n==1) return 1
    return fib(n-1)+fib(n-2)
}
for (let i=0;i<10;i++) {
    console.log(fib(i))
}

添加缓存来减少计算次数

let countobj = {}
function fib (n) {
    if (countobj[n]) return countobj[n]
    console.count();
    if (n==0 || n==1) {
        countobj[n] = 1
        return 1
    } else {
        let result = fib(n-1)+fib(n-2)
        countobj[n] = result
        return result
    }
     
}
for (let i=0;i<10;i++) {
    console.log(fib(i))
}