实现一个常见的斐波那契函数:
var fibonacci = function(n){ return n<2 ? n : fibonacci(n-1) + fibonacci(n-2); };
然而,在我们实际计算时,做了很多无谓的工作,例如计算fibonacci(10)时,函数实际上被调用了177次!浪费了很多时间,如果我们能把之前计算得到的结果储存起来,便可以减少很多计算量。我们先声明一个memb数组用于储存数据,每次要计算时先查询数组里面是否有改值,如果有的话则直接调用,否则再计算。
var fibonacci = function(){ var memb = [0,1]; var fib = function(n){ var result = memb[n]; if(typeof memb[n] !== 'number'){ var result = fib(n-1) + fib(n-2); memb[n] = result; } return result; }; return fib; }();
经过这样处理后,计算fibonacci(10)时函数实际上只调用了19次。