斐波那契数列

题目: 用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 @ 2025-02-26 14:29  yangkangkang  阅读(52)  评论(0)    收藏  举报