everycode icon indicating copy to clipboard operation
everycode copied to clipboard

2014年11月17日

Open nunnly opened this issue 11 years ago • 11 comments

实现一个斐波那契数列

/* 根据传入的数值,返回一个等长的,斐波那契数列的数组。
 * 如果参数为负数,那么返回空数组
 */

function fibonacci(num){

}
//测试如下
fibonacci(4); // should return [0,1,1,2]
fibonacci(-1); // should return []

nunnly avatar Nov 17 '14 06:11 nunnly

/没考虑过性能,性能是硬伤/

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;
};

Justhing avatar Nov 17 '14 06:11 Justhing

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]

teabyii avatar Nov 17 '14 06:11 teabyii

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));

nunnly avatar Nov 17 '14 07:11 nunnly

话说,在写答案的时候用

  ...

包裹代码,照顾一下看代码的人吧。

teabyii avatar Nov 17 '14 07:11 teabyii

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); // []

soulcm avatar Nov 17 '14 10:11 soulcm

//有个求斐波那契数列第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)));
}

qingo avatar Nov 17 '14 11:11 qingo

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)));
}

qingo avatar Nov 17 '14 11:11 qingo

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 [];
}

weisuiyu avatar Nov 18 '14 01:11 weisuiyu

@soullcm 在回调的时候使用了arguments.callee,好评!这样做的好处很明显呢 :dancers:

zhanglun avatar Nov 19 '14 09:11 zhanglun

function fibonacci(num){
    var i = 0,
        arr = [];

    num = parseInt(num, 10) || 0;

    for(; i < num; i++){
        arr.push(i);
    }

    return arr;
}

xuexb avatar Nov 21 '14 02:11 xuexb

@Justhin 效率还可以啊100W 70ms

CraigZeng avatar Dec 02 '14 11:12 CraigZeng