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))
浙公网安备 33010602011771号