试着输出斐波那契数列的前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))
}