回顾几个月之前看网上罗列了一些java算法的经典例子,和同事私下没事一块研究只用js如何打印斐波那契数列
1 必须是这样的一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55…这个数列从第3项开始,每一项都等于前两项之和。
2.n从1开始,例如,第1项是0,第2项是1,第4项是2。(n > 0)
<!DOCTYPE HTML>
<html>
<head><meta charset="utf-8">
<title>ab</title>
<meta name="Keywords" content="">
<meta name="Description" content="">
<!-- <script type="text/javascript" src="jquery.js"></script> -->
<script>
window.onload =function (){
/*function fib(a){
if(a==1){
return 0;
}else
if(a<1){
return a < 2? a : fib(a-1)+fib(a-2);
}
}*/
function fib(a){
/*if (1<a< 3)return a;*/
if (a==1) return 0; // 我天真的以为这样就能行
else if(a-2>=0){return fib(a-1)+fib(a-2);}
}
var testCases = [1,2, 3, 4,5,7,-1];
var $resultEle = document.getElementById('result');
testCases.forEach(function (n) {
var result = fib(n);
var $ele = document.createElement('p');
$ele.innerHTML = '第' + n + '个数是:' + result;
$resultEle.appendChild($ele);
});
}
</script>
</head>
<body>
<div id="result"></div>
</body>
</html>
结果输出
第1个数是:0 第2个数是:NaN 第3个数是:NaN
第4个数是:NaN 第5个数是:NaN 第7个数是:NaN
第-1个数是:undefined
查网上资料
用js写斐波那契数列的四种算法
标签: 斐波那契数列 js callee 闭包分类: javascript世界
//四种斐波那契数列
// var cnt = 0;
//方法一(常规):6765(结果),21891(计算次数)--下同
var fib = function (n) {
cnt++;
if (n < 2) return n;
return fib(n - 1) + fib(n - 2);
};
//方法二(第三方参数)6765,19
var fib = function (k) {
var m = 0, n = 1, sum;
if (k < 2) return k;
for (var i = 2; i < k+1; i++,cnt++) {
sum = m + n;
m = n;
n = sum;
}
return sum;
};
//方法三(数组)6765,19
var fib = function (n) {
var arr = [0, 1];
for (var i = 2; i < n+1; i++,cnt++) {
arr[i] = arr[i - 1] + arr[i - 2];
}
return arr[n];
};
//方法四(闭包)6765 ,19
var fib = function (n) {
var arr = [0,1];
if (n < 2) return n;
return (function (n) {
if (n > 1 && !arr[n]) {
arr[n] = arguments.callee(n - 1) + arguments.callee(n - 2);
cnt++;
}
return arr[n];
})(n);
};
//执行20计算结果与次数
之后又继续改啊改
反正这个fib()函数我试过了挺多次 浏览器总一直弹错误无法解释。
后来在群里问一个叫小明的人,他仿佛点醒了我
function fib(n) {
var x = 0, y = 1, sum;
if(n<=0) return 0;
if (n < 2) return n;
for (var i = 2; i < n+1; i++) {
sum = x + y;
x = y;
y = sum;
}
return sum;
}
之后将他给的js代码改了之后 终于完成:
js应该如下这样写才行
function fib(n) {
var x = 0, y = 1, sum;
if(n<=0) return null;
if(n<=1) return 0;
if (n < 3) return n-1;
for (var i = 3; i < n+1; i++) {
sum = x + y;
x = y;
y = sum;
}
return sum;
}
var testCases = [10, 20, 30, 100,6,5, 4, 3,2, -1, 1];
var $resultEle = document.getElementById('result');
testCases.forEach(function (n) {
var result = fib(n);
var $ele = document.createElement('p');
$ele.innerHTML = '第' + n + '个数是:' + result;
$resultEle.appendChild($ele);
});