everycode
everycode copied to clipboard
2014年11月17日
实现一个斐波那契数列
/* 根据传入的数值,返回一个等长的,斐波那契数列的数组。
* 如果参数为负数,那么返回空数组
*/
function fibonacci(num){
}
//测试如下
fibonacci(4); // should return [0,1,1,2]
fibonacci(-1); // should return []
/没考虑过性能,性能是硬伤/
function fibonacci(num)
{
var temp = [];
if(num<0)
{
return temp;
}
for(var i=0;i<num;i++)
{
if(i==0){
temp.push(0);
}else
if(i==1){
temp.push(1);
}else{
temp.push(temp[i-1]+temp[i-2]);
}
}
return temp;
};
function fibonacci(num) {
num = +num;
if (num === 1) {
return [0];
}
if (num === 2) {
return [0, 1];
}
if (num > 2) {
var arr = fibonacci(num - 1);
arr[num - 1] = arr[num - 2] + arr[num - 3];
return arr;
}
return [];
}
console.log(fibonacci(9)); // [0, 1, 1, 2, 3, 5, 8, 13, 21]
function fibonacci(num) {
//Math.sign 识别变量的符号,如果是正数返回1,负数返回-1,0返回0,非数字返回NaN
if (Math.sign(num) != 1) {
return [];
} else if (num == 1) {
return [0]
} else if (num == 2) {
return [0, 1]
} else {
var arr = [0, 1]
for (var i = 2; i < num; i++) {
arr[i] = arr[i - 2] + arr[i - 1];
}
return arr;
}
}
console.log(fibonacci(4));
console.log(fibonacci(-1));
话说,在写答案的时候用
...
包裹代码,照顾一下看代码的人吧。
function fib(n) {
var fibArray = [];
var fibNum = function(i) {
if (i == 0) {
return 0;
}
if (i == 1) {
return 1;
}
return arguments.callee(i - 1) + arguments.callee(i - 2); //递归调用fibNum函数
};
for (var i = 0; i < n; i++) {
fibArray[fibArray.length] = fibNum(i);
}
return fibArray;
}
fib(10); // [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
fib(0); // []
fib(-5); // []
//有个求斐波那契数列第n项的值的公式,有点跑题,先贴上吧,n>0
function fibonacci(n) {
return Math.round((Math.sqrt(5) / 5) * (Math.pow((Math.sqrt(5) + 1) / 2, n))
- (Math.sqrt(5) / 5) * (Math.pow((1 - Math.sqrt(5)) / 2, n)));
}
function fibonacci(n) {
var sqrt5 = Math.sqrt(5);
return Math.round((sqrt5 / 5) * (Math.pow((sqrt5 + 1) / 2, n))
- (sqrt5 / 5) * (Math.pow((1 - sqrt5) / 2, n)));
}
var fibonacci = function(n){
var tmp = [];
if(n===1){
return [0];
}else if(n===2){
return [0,1];
}else if(n>2){
tmp = fibonacci(n-1);
tmp[n-1] = tmp[n-2] + tmp[n-3];
return tmp;
}
return [];
}
@soullcm 在回调的时候使用了arguments.callee,好评!这样做的好处很明显呢 :dancers:
function fibonacci(num){
var i = 0,
arr = [];
num = parseInt(num, 10) || 0;
for(; i < num; i++){
arr.push(i);
}
return arr;
}
@Justhin 效率还可以啊100W 70ms