JavaScript中斐波那契递归性能问题的解决思路

1、这种写法有性能问题

1 function getFB(n){
2     if(n==1 || n==2){
3         return 1;
4     }
5     return getFB(n-1)+getFB(n-2);
6 }
7 console.log(getFB(50));

2、解决性能问题低下的思路:把已经求过的值存起来,如果后面还要求这个值就直接取出来,而不是再去求

 1 function createFB(){
 2     var obj = {};//声明一个对象,用来保存已经求过的项
 3     functiion getFB(n){
 4         //求n位是多少,先去对象中看下是否已经求过
 5         if(obj[n]!=undefined){
 6             //说明这个n为已经求过,并且已经保存在对象中,直接返回这个值
 7             return obj[n];
 8         }else{
 9             //说明这个n位没有求过,求出来且存入obj中
10             if(n==1 || n==2){
11                 obj[n] = 1;
12                 return obj[n];
13             }else{
14                 obj[n] = getFB(n-1) + getFB(n-2);
15                 return obj[n];
16             }
17         }   
18     }
19     return getFB;
20 }
21 console.log(createFB()(50))

 

posted @ 2020-05-13 17:38  Justin-wu  阅读(224)  评论(0)    收藏  举报