当前位置: 首页 > news >正文

斐波那契数列 的计算规则

1 首先了解定义
指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)
可以得知

假设有一个数组 arr = [1,2,3,4,5,6,7,8,9…],
对应的下标是 0,1,2,3,4,5,6…
公式

 F(0)=0,
 F(1)=1, 
 F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)

那么

 f(0) = 0, 
 f(1) = 1, 
 f(2)= f(1)+f(0) = 1,

那么我们可以直到最重要的就是 F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)
。我们可以列出一个函数来求值

第一种方法:

let fn= function f(n){
if(n == 0){
		retrun 0;
	}
else if( n ==1  || n  ==2 ){
		return 1
	}
else {
		return f(n-1)+f(n-2)
	}
	console.log(fn(9)) // 想要打印谁的值就写谁的值
}

但是这种方法智能验证到50 就开始报站了。
所以有优化的方法

那么开始我们的第二种
进行倒叙的方法计算

就是我们可以在log 里面先打印看看结果 得知没有值的时候是undefined 所有要判断是不是undefined 就好了

let arr = [0,1] //初始值我们是知道的,因为是固定的,可以直接用。
let fn = function f(n){
	if(arr[n] === undefined) {
	let a= f(n-1)+f(n-2);
		arr[n] = a ;
// 直接赋值进去,这样就会进行计算,不过我们要知道里面的原理,因为到最后最多也就执行到1000多点就开会报站了。举个例子,加入要5的值,他是要计算4和3的,但是发现4里面没有,所以又会继续先计算3和2 的。当计算到3的时候发现没2的,又会计算2的结果,这样来回的进行套路,一层一层嵌套计算
		return a;
		} 
		else {
			return arr[n]
	}
}

第三种就比较优化了,不糊报错也不会报站,只是计算不出来的时候会给我们一个正无穷大的结果。

就是我们要正序算

let  arr = [0, 1]
let fun = function f(n){
	for (let i = 2; i<=n; i++) { // 之所以等于2,是因为从下标2开始结果开始计算的,前边都是固定的
	arr [i] = arr [i-1]+ arr[i-2];
	}
	return arr[n]
}

就算我们输出了10000甚至更大,也不会报错了。

相关文章:

  • react 中 props 和 state的相同与不同
  • 理解java Web项目中的路径问题
  • react 中千万不要在render里调用this.setState
  • 系统界面图片
  • HDU 3068 回文串-Manacher
  • reactJS的props.children.map函数来遍历会收到异常提示,为什么?应该如何遍历?
  • Elasticsearch 2.3.3 搜索引擎的elasticsearch-jdbc插件安装
  • Redux中同步 action 与异步 action 最大的区别是什么
  • setTimeout和setInterval的区别
  • shell脚本编程
  • 数组常用的处理方法 map,forEach,filter, every,some, set, concat, find 等
  • 阿里云自定义监控配置实例
  • Import 和 link引入的区别
  • 菜鸟如何才能快速提高自己的编程技术
  • css使子元素在父元素居中的各种方法/ 子元素居中有哪些方案
  • [译]如何构建服务器端web组件,为何要构建?
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • AWS实战 - 利用IAM对S3做访问控制
  • CEF与代理
  • leetcode讲解--894. All Possible Full Binary Trees
  • linux安装openssl、swoole等扩展的具体步骤
  • Map集合、散列表、红黑树介绍
  • oldjun 检测网站的经验
  • PV统计优化设计
  • Rancher如何对接Ceph-RBD块存储
  • 日剧·日综资源集合(建议收藏)
  • 入口文件开始,分析Vue源码实现
  • 突破自己的技术思维
  • 我的面试准备过程--容器(更新中)
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #HarmonyOS:Web组件的使用
  • #传输# #传输数据判断#
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (07)Hive——窗口函数详解
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (一)Java算法:二分查找
  • (一)u-boot-nand.bin的下载
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • (状压dp)uva 10817 Headmaster's Headache
  • .net core 6 redis操作类
  • .NET面试题解析(11)-SQL语言基础及数据库基本原理
  • /proc/vmstat 详解
  • @Not - Empty-Null-Blank
  • [ vulhub漏洞复现篇 ] ThinkPHP 5.0.23-Rce
  • [20171113]修改表结构删除列相关问题4.txt
  • [Android开源]EasySharedPreferences:优雅的进行SharedPreferences数据存储操作
  • [C++参考]拷贝构造函数的参数必须是引用类型
  • [Electron]ipcMain.on和ipcMain.handle的区别