算法-查找斐波纳契数列中第 N 个数
时间:2022-07-28
本文章向大家介绍算法-查找斐波纳契数列中第 N 个数,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
描述
查找斐波纳契数列中第 N 个数。
所谓的斐波纳契数列是指:
前2个数是 0 和 1 。
第 i 个数是第 i-1 个数和第i-2 个数的和。
斐波纳契数列的前10个数字是:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34 ...
怎样算解成功:
给定 1,返回 0
给定 2,返回 1
给定 10,返回 34
题目分析:
值得注意的是:前两个数字可以算成是起始元素,从第三个元素才开始有规则。
code:
- 递归解法: const fibonacci = (n) => { if (!(typeof n === 'number' && n % 1 === 0 && n > 1)) { throw '请输入大于0的整数数字'; } var array = [0, 0, 1]; let temp = (n) => { if (n == 1 || n == 2) return array[n]; array[n] = temp(n - 1) + temp(n - 2); // 递归获取推算数组每一个元素的值 return array[n]; } let num = temp(n); array.splice(2, 1); // 将数组恢复成 斐波纳契数列 return num; }
- 遍历保存结果 const fibonacci = (n) => { let a = 0, b = 1, c, d = [0]; for (let i = 1; i < n; i++) { c = a + b; a = b; b = c; d.push(a); // 加戏 恢复数列 } console.log(d, '斐波纳契数列') return a }
- 一次遍历 逐步推导所有元素 时间消耗:158ms 最优 const fibonacci = (n) => { let num = new Array(n).fill(0); // 初始化数组,并设置初始值 num[1] = 1; // 设置第二个元素的值 推导第3个元素 for (let i = 2; i <= n - 1; i++) { num[i] = num[i - 2] + num[i - 1]; // 遍历逐步推导元素值 数组完全符合数列不用进行判断等 运行效率最高。 } return num[n - 1]; // 数组是从0开始计算 所以要减1 }
不行,我一定要秀一波,不然心里难受:
最后一题的提交,甩的第二名看不到我的车尾灯,开心!
第一回刷算法题,以后要继续坚持!
代码地址
- 多线程下载
- Matlab编程之——卷积神经网络CNN代码解析
- Windows版本nginx
- android仿ios开关按钮
- Python机器学习:数据拟合与广义线性回归
- 一个高效的中文词法分析工具包
- 滑动开关按钮SlideSwich
- 全栈工程师的百宝箱:图形工具篇
- 获取手机端验证码
- RESTful WCF
- android顶部导航条
- AggregateCacheDependency、CacheDependency、SqlCacheDependency Asp.net 2.0和Sql Server的缓存管理和使用ObjectBuil
- slidingmenu开源效果
- MySQL 5.0和PostgreSQL 8.1
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 「通信框架Netty4 源码解读(一)」起步,关于IO的简单总结,模拟一个redis客户端
- Unet实现文档图像去噪、去水印
- 「influxDB 原理与实践(一)」安装部署,实现基础的添加删除查询功能
- 「influxDB 原理与实践(二)」详解influxDB的写入与查询
- Nginx系列:https配置
- 笛卡尔积、等值连接、自然连接、外连接一文看懂
- nginx系列:常用利用shell统计日志
- Nginx系列:图片过滤处理
- Nginx系列:几款负载均衡第三方插件的安装与使用
- 「高并发通信框架Netty4 源码解读(三)」NIO缓冲区Buffer详解
- UML类图符号:各种关系说明以及举例
- 「高并发通信框架Netty4 源码解读(四)」NIO缓冲区之字节缓冲区ByteBuffer详解
- 「influxDB 原理与实践(三)」连续查询
- 为什么使用OPA而不是原生的Pod安全策略?
- 浅入浅出 Java ConcurrentHashMap