斐波那契数列
题目: 用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) }) })
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
2023-02-26 js相关面试题总结