前言
斐波那契数列非常有意思,又称黄金分割数列。因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1963年起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。
既然这么有意思,那么我们就用JavaScript代码来实现以下这个有意思的例子吧!
内容
<script type="text/javascript">
// 1 1 2 3 5 8 12
// 第n项是第n-1和n-2的和,开始的两项为1
var count1 = 0;
var fib1 = function(n) {
count1++;
if(n == 0 || n == 1) {
return 1;
}
return fib1(n-1) + fib1(n-2);
};
// fib1(11); // 287
// fib1(12); // 465
//fib1(13); // 753
//alert(count1);
/*
var foo1 = function() { };
var foo2 = (function() {
// 闭包的位置
var num = "幽灵";
return function() {
};
})();
*/
var count2 = 0;
var fib2 = (function() {
var arr = [1,1]; // 斐波那契数列
return function(n) {
count2++;
/*
if(arr[n]) {
返回
} else {
递归
}*/
var res = arr[n];
if(res) {
return res;
} else {
arr[n] = fib2(n-1) + fib2(n-2);
return arr[n];
}
};
})();
/*
for(var i = 0; i < 10; i++) {
alert(fib1(i) + ", " + fib2(i));
}*/
// fib1(11); // 287
fib2(11); // 21
// fib1(12); // 465
fib2(12); // 24
fib2(8);
//fib1(13); // 753
//alert(count1);
alert(count2);
</script>
总结
哈哈!想要完整的代码不?No,不给,就不给。自己想想剩下的代码。
end
谢谢您的阅读!