解决问题的思路: 把已经求过的项,用一个对象存起来,下次如果还要求这个项,就可以直接取出来,而不是调用getFB函数求出来.
已经求过的项: 是第几位,值是多少, 键值对,所以声明一个对象obj,用来保存已经求过的项
var i = 0;//声明一个变量i,记录调用getFB这个函数的次数.
//声明一个对象obj,用来保存已经求过的项.
var obj = {};
function getFB(n){
i++;
//求n位是多少,就先去obj里面看看,之前求过没有,如果之前求过,就直接取出来使用.
if(obj[n] != undefined){
//如果进到了这里,说明当前这个n位已经求过,已经存进obj里面了
return obj[n];
}else {
//如果进到这里来了,就说明当前这个n位之前没求过,没求过那就求呗.
if(n == 1 || n == 2){
obj[n] = 1;
return 1;
}else {
obj[n] = getFB(n-1) + getFB(n-2);
return obj[n];
}
}
}
console.log(getFB(60));
console.log(i);