//斐波纳契数列 是一组这样的数字:
0,1,1,2,3,5,8,13,21,34……在数学上,斐波那契数列是以递归的方式定义:
f(0) = 0; f(1) = 1; f(n) = f(n-1)+f(n-2);//1 1 2 3 5 8 …… 写法一:
function num(n){ if( n==0||n==1){ return n; } if(n>=2){ return num(n-1)+num(n-2); } }num(5); 写法二:
function num(n){ return n<2 ? n: num(n-2) + num(n-1); } num(10); 在这里我们会发现执行num(10),等价于执行num(9)和num(8), 相当于 num(10) = num(9) + num(8) num(9)= num(8)+num(7); num(8)= num(7)+num(6);我们可以发现 num(8)和num(7)被重复执行,这样的话就会延长程序的执行时间,num()函数里面的参数是10,我们看不出什么,但改为30或者50呢?经过我的测试如果为50的话,五分钟时间都没有执行结果,大家不信可以测试,但如果我们把每次执行过的保存起来,所用的时间不会超过1s。下面的代码可以帮助我们深入的理解。
var cache = { 0:0, 1:1 } function num(n){ if(typeof cache[n] === 'number'){ return cache[n]; } var result = cache[n] = num(n-1) + num(n-2); return result; } num(10);通过这种方式的话,num(50),1s就可以执行完,就是这么神奇。 [参考资料] 1.(http://www.cnblogs.com/jiancui/archive/2017/02/09/fibonacci.html) 2.(http://www.jianshu.com/p/0b32ce736c24)