千家信息网

JS怎么输出斐波那契数列

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇内容介绍了"JS怎么输出斐波那契数列"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!试输出斐波那契
千家信息网最后更新 2026年11月02日JS怎么输出斐波那契数列

本篇内容介绍了"JS怎么输出斐波那契数列"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

试输出斐波那契数列的前10项,即 1、1、2、3、5、8、13、21、34、55。

分析

有些人看到题目中出现了"斐波那契数列"这个概念后,可能脑袋就蒙圈了,其实大可不必!

对于这道题,可以不用理会这个陌生概念,我们只需要关心后面它给出的数字规律即可。

我们可以看到,规律总结起来就一句话:从第三位开始,后面每项的值等于前两项之和,用式子表示的话就是:an = an-1 + an-2(n ≥ 2) 。

根据题目要求,其实就是要我们做两件事:

  1. 生成每一项的值。

  2. 打印输出所有值。

基础解法

解题思路:

  • 创建一个数组存放数列各项的值。

  • for 循环生成数列各项并存入数组(为了计算后面各项的值),打印生成的项。

代码实现如下:

/*** @description 创建一个生成数列数组的方法* @param {number} n 表示要生成多少项(即数组长度,不是数组下标)*/function createFibArr(n) {// 声明一个存放数据的数组let fibArr = [];// 从第三项(下标为2)开始,每一项都等于前两项之和for (let index = 0; index < n; index++) {index < 2 ? fibArr.push(1) : fibArr.push(fibArr[index - 1] + fibArr[index - 2]);console.log(fibArr[index]);}} // 调用方法createFibArr(10);

分析:

这应该是最基本的解题方法,很容易就实现了。

但如果这是面试题的话,这样的答案只能说是中规中矩,没有出彩的地方,最重要的是体现不出我们与众不同的气质啊,所以,我们应该用点其他的手段来提升下自己的逼格!

初级递归

解题思路:

  • 通过递归的手段计算出各位置对应的值(这里有个前提是:第一项和第二项是确定值,否则,递归就不好用了)。

  • 打印结果。

代码实现如下:

/*** @description 计算出第 n 项的值* @param {number} n 表示每一项的下标值* @returns {number} 下标为 n 的位置的值*/function calFibValue(n) {console.count("执行次数:")return n < 2 ? 1 : (calFibValue(n - 1) + calFibValue(n - 2));} /*** @description 打印计算结果* @param {number} n 代表要打印多少项*/function printRes(n) {for (let index = 0; index < n; index++) {console.log(calFibValue(index));}} // 调用打印方法printRes(10); // 执行次数:: 276

分析:

递归的使用确实提升了代码的逼格,但是又引来了另外一个问题:性能问题。

每一项的值都是从第一项开始计算累加 出来的,比如计算第四项的值,其过程如下:

  • 返回第一项的值:1 。

  • 返回第二项的值: 1 。

  • 计算第三项的值为 1 + 1 = 2 。

  • 计算第四项的值为 2 + 1 = 3 。

在计算第五项值的时候,还要经过上面这个过程来获取第四项的值,进行了大量的重复运算。

为了惊艳面试官,我们还需要再做优化!

递归优化

解题思路:

  • 导致重复计算的是递归那部分的逻辑,所以优化点在递归这里。

  • 既然存在重复运算,那就意味着其实后面的运算完全可以使用前面已经计算出来的值,所以我们需要引入缓存来保存每次的计算结果。

代码实现:

/*** @description 计算出第 n 项的值* @param {number} n 表示每一项的下标值* @returns {number} 下标为 n 的位置的值*/ // 存放每次计算结果的 Map 结构// 这里也可以用数组,但是在语义方面没有 Map 或对象直接let fibValueMap = new Map();function calFibValue(n) {console.count("执行次数:");// 如果缓存中已存在对应的值,则直接返回if (fibValueMap.has(n)) {return fibValueMap.get(n);}const value = n < 2 ? 1 : (calFibValue(n - 1) + calFibValue(n - 2));// 在计算出每一项的之后,需要及时存入 MapfibValueMap.set(n, value);return value;} /*** @description 打印计算结果* @param {number} n 代表要打印多少项*/function printRes(n) {for (let index = 0; index < n; index++) {console.log(calFibValue(index));}} // 调用打印方法printRes(10); // 执行次数:: 26

分析:

根据打印出来的 count 来看,优化后的递归次数是优化前的 1/10 左右,这个结果就很惊喜了。

"JS怎么输出斐波那契数列"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

递归 数列 数组 结果 输出 方法 次数 生成 下标 代码 分析 位置 思路 过程 运算 之和 代表 内容 就是 手段 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 百单网互联网科技有限公司怎么样 广东万易互联网科技有限公司惠州分公司 苏州找大状互联网科技有限公司 疫情对互联网科技公司影响 河南真二互联网科技有限公司 华宇互联网科技 互联网科技的未来发展 人人互联网科技是培训 互联网科技热点资讯 互联网金融中的现代科技 互联网新科技动漫ppt素材 为客找房互联网科技公司怎么样 滨湖区互联网智能科技产品有哪些 21世纪互联网科技成就 宁波跨境商互联网科技有限公司 互联网金融金融科技 数字科技和互联网金融哪个好 互联网领先科技成果宣传视频 优雇互联网科技有限公司 高科技和互联网的现代国家 奇酷互联网科技 互联网金融科技平台 美国互联网前沿科技 深圳市运趣互联网科技有限公司 宁夏众和广鑫互联网科技有限公司 荆州市昕露互联网络科技有限公司 广州千川互联网科技有限公司 图游互联网科技 扫呗互联网科技有限公司 互联网的黑科技实验室
0