首页 > 试题广场 >

斐波那契数列

[编程题]斐波那契数列
  • 热度指数:45409 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
用 JavaScript 实现斐波那契数列函数,返回第n个斐波那契数。 f(1) = 1, f(2) = 1 等
function fibonacci(n) {
    if(n<=0){
        return;
    }
    
    if(n === 1||n === 2){
        return 1;
    }
   
    return fibonacci(n - 1) + fibonacci(n - 2)
}
利用递归的思想解决
发表于 2021-03-31 15:11:25 回复(0)
递归做法
function fibonacci(n) {
    if (n==0)
        return 0
    if(n==1)
        return 1
    if (n>=2)
        return fibonacci(n-1)+fibonacci(n-2)
}

发表于 2021-03-26 16:54:28 回复(0)
function fibonacci(target,a=0,b=1,o=target){
    if(o<1){
        return 0
    }
    target--
    let c=a+b
    if(target<=1){
        return c
    }
    return fibonacci(target,b,c)
}
编辑于 2021-03-23 19:27:16 回复(0)
单纯使用递归,如果 n 比较大的话,会因为计算量太大结果出不来,使用闭包缓存前一次计算结果,再大的数也能瞬间完成
function memorizedFibonacci() {
    const mem = [0,1,1];  // n对应的结果缓存
    return function fibonacci(n) {
        if (mem[n] !== undefined) return mem[n];
        return mem[n] = fibonacci(n-1) + fibonacci(n-2);
    }
}
var fibonacci = memorizedFibonacci();


编辑于 2021-02-06 17:51:24 回复(0)
递归(更简洁):
function fibonacci(n) {
    if (n <= 2) {
        return 1
    }
    return fibonacci(n - 1) + fibonacci(n - 2)
}


递推(高性能):
function fibonacci(n) {
    let prev = 1
    let next = 1
    for (let i = 2; i <= n; i++) {
        const temp = prev
        prev = next
        next = temp + next
    }
    return next
}


发表于 2020-11-16 00:03:57 回复(0)
function fibonacci(n) {
    if(n == 1){
        return 1;
    }else if(n == 2){
        return 1;
    }else{
        return arguments.callee(n-1) + arguments.callee(n-2);
    }
}

发表于 2020-09-29 12:12:52 回复(0)
//解法一
function fibonacci(n) {
    let first = 1, second = 1, tmp = 0, res = [1, 1];
    for (let i = 2; i <= n - 1; i++) {
        tmp = first + second;
        first = second;
        second = tmp;
        res[i] = second;
    }
    console.log(res)
    return res[n - 1];
}
//解法二
function fibonacci(n) {
    if (n === 1 || n === 2) {
        return 1;
    }
    return fibonacci(n - 1) + fibonacci(n - 2);
}

发表于 2020-07-22 15:04:23 回复(0)
function fibonacci(n) {
    var a = [1 , 1];
    for(var i = 2;i < n;i++) {
        a.push(a[i - 1] + a[i - 2]);
    }
    return a[n - 1];
}
发表于 2020-03-23 14:13:19 回复(0)
var data={
    1:1,
    2:1
}
function fibonacci(n) {
    if (n>0&&n<3) return data[n];
    else if(data[n]) return data[n];
    else {
        data[n]=fibonacci(n-1)+fibonacci(n-2);
        return data[n]
    }
}
发表于 2019-10-30 17:28:13 回复(0)
function fibonacci(n) {
    if(n==1||n==2){
        return 1;
    }
    return fibonacci(n-1)+fibonacci(n-2)
}
发表于 2019-09-03 10:45:18 回复(0)
function fibonacci(n) {
    if(n==1 || n==2){
         return 1;       
    }
    else{
        return fibonacci(n-1)+fibonacci(n-2);
    }
}
发表于 2019-07-29 21:28:28 回复(0)
function fibonacci(n) {
if((n==1)||(n==2)){
return 1;
}else{
return arguments.callee(n-2)+arguments.callee(n-1);
}
}
编辑于 2019-06-07 22:30:03 回复(0)
function fibonacci(n) {
    if (n <= 2) {
        return 1;
    }
    var a = new Array(n+1);
    a[1] = 1;
    a[2] = 1;
    for (var i = 3; i < n+1; i++) {
        a[i] = a[i-2] + a[i-1];
    }
    return a[n];
}

发表于 2019-05-15 15:05:18 回复(0)
function fibonacci(n) {
    var first=1;
    var firstNext=1;
    var number=1;
    for(var i=2;i<n;i++){
        number=(first+firstNext);
        first=firstNext;
        firstNext=number;
    }
    return number;
}
//动态规划解决,效率比递归好多了

发表于 2019-04-02 14:23:57 回复(0)
function fibonacci(n) {
    if(n>2){
    return fibonacci(n-1)+fibonacci(n-2);
    }
  else return 1;
}
发表于 2018-04-17 15:49:32 回复(0)
function fibonacci(n) {
    // 高等数学 通项公式
    var sqrt5 = Math.sqrt(5);
    return Math.round((Math.pow((1+sqrt5)/2,n)-Math.pow((1-sqrt5)/2,n))*sqrt5/5);
}
发表于 2017-09-01 17:38:49 回复(6)
function fibonacci(n) {
    if(n < 0) return 0;
    if(n <= 2) return 1;
    var first = 1;
    var second = 1;
    for(var i = 2; i<n; i++)
        {
            third = first  + second;
            first = second;
            second = third;
        }
    return third;
}
发表于 2017-08-11 21:00:08 回复(0)
function fibonacci(n) {
    return n > 1 ? fibonacci(n-1) + fibonacci(n-2) : n
}
发表于 2017-03-08 12:55:20 回复(0)
function fibonacci(n) {
        //一、递归解法
        //return n<=2?1:fibonacci(n-1)+fibonacci(n-2);
        
        //二、循环解法
        var num1=1;
        var num2=1;
        for(var i=2;i<n;i++){
                num2+=num1;
                num1=num2-num1;
        }
        return num2;
}
循环体内的计算过程详解:
第一句:将num2的旧值,加上num1,得到num2的新值
第二句:用num2的新值,减去num1,得到num1的新值
当前循环结束,num1和num2的值都获得了更新~
编辑于 2017-02-28 11:34:45 回复(4)
function fibonacci(n) {
    if(n<0){
        return -1;
    }else if(n < 2){
        return n;
    }else{
       return arguments.callee(n-1) +  arguments.callee(n-2); 
    }
}
一个递归完事儿,装逼写法=。=
发表于 2016-08-24 15:41:19 回复(2)

问题信息

难度:
20条回答 27276浏览

热门推荐

通过挑战的用户

查看代码