斐波那契数列

题目: 用JS 计算 第n个斐波那契数列的值,之一时间复杂度

分析:

  • 斐波那契数列
    • f(0) = 0
    • f(1) = 1
    • f(n) = f(n-1) + f(n-2) 前两个值的和
  • 递归实现
    • 这种方式会导致很多重复计算
    • 时间复杂度是O(2^n),爆炸式增长,不可用(试试n=100,程序会卡死) 
  • 循环实现 
    • 用循环实现,记录中间结果
    • 时间复杂度O()

代码实现:

  • 递归实现(不可用):
    // 递归实现,改代码不可取,n=100时就会被卡死
    function fibonacci(n:number): number{
        if(n === 0) return 0
        if(n === 1) return 1
        const res = fibonacci(n -1) + fibonacci(n-2)
        return res
    }

    n= 100 程序就被卡死了,所以递归实现斐波那契是不可取的

  • 循环实现:
    复制代码
    function fibonacci(n: number): number{
        if(n <= 0) return 0
        if(n === 1) return 1
        let a = 0 // 记录 n-2的结果
        let b = 1 //记录 n-1的结果
        let res = 0 
        for(let i = 2; i <= n ; i++){
            res = a + b 
            // 记录中间结果
            a = b
            b = res
        }
        return res
    }
    复制代码

测试用例:

复制代码
/**
 * @description 计算第 n 个斐波那契数列的值 测试
 */
import {fibonacci} from './fibonacci'
describe('计算第 n 个斐波那契数列的值 测试',()=>{
    it('0 和 1',()=>{
        expect(fibonacci(0)).toBe(0)
        expect(fibonacci(1)).toBe(1)
    })
    it('正常情况',()=>{
        expect(fibonacci(2)).toBe(1)
        expect(fibonacci(3)).toBe(2)
        expect(fibonacci(6)).toBe(8)
        expect(fibonacci(100)).toBe(354224848179262000000)
    })
    it('n小于0情况',()=>{
        expect(fibonacci(-13)).toBe(0)
    })
})
复制代码

 

 

 

    

     

posted @   yangkangkang  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
历史上的今天:
2023-02-26 js相关面试题总结
点击右上角即可分享
微信分享提示