/*斐波那契数列 源代码分析
f(x) = 1 ; 当 x < 2 ;
f(x) = f(x-1)+f(x-2); 当 x >= 2 ;
通项式为:fn ={((1+根号5)/2)^n-((1-根号5)/2)^n}/(根号5)
则根据通项式构造函数求fn;
*/
//计时函数 console.time() //计时开始 console.timeEnd() //计时结束并输出时长
console.time();
var i;
var total;
//方法一 使用原始方法
function fibo(i)
{
if(i == 0){
return 1;
}else if(i == 1){
return 1;
}else{
total = fibo(i-1) + fibo(i-2);
return total;
}
}
//方法二 使用迭代解法, 将每一次执行的数据保存起来,时间会大大缩短
function fibo1(i)
{
if(i<=1){
return 1;
}
var pre = 1;
var prepre = 1;
for(j = 2; j <= i; j++){
total = pre + prepre;
prepre = pre;
pre = total;
}
return total;
}
console.log(fibo(40));//结果为:165580141 时间为:2313.9990234375ms;
console.log(fibo1(40));//结果为:165580141  时间为:0.805908203125ms;
console.timeEnd();

对比结果可能fibo1函数明显比fibo函数优化的明显,时间复杂度为O(x);

fibo1的思路为:将每一次递归的数值保存起来,后期就不需要再次的寻找;

关于斐波那契数列优化的方法还有很多,这里先将这一种,还有一些涉及到比较难懂的高等数学,对于初学者会比较的难学;

注意:上述代码为js代码,请嵌入到html文件中运行;

计时函数 console.time() //计时开始

console.timeEnd() //计时结束并输出时长

单位以ms来计算;

PHP算法之斐波那契数列(递归)的更多相关文章

  1. Reverse反转算法+斐波那契数列递归+Reverse反转单链表算法--C++实现

    Reverse反转算法 #include <iostream> using namespace std; //交换的函数 void replaced(int &a,int & ...

  2. 剑指offer-第二章算法之斐波拉契数列(青蛙跳台阶)

    递归与循环 递归:在一个函数的内部调用这个函数. 本质:把一个问题分解为两个,或者多个小问题(多个小问题相互重叠的部分,会存在重复的计算) 优点:简洁,易于实现. 缺点:时间和空间消耗严重,如果递归调 ...

  3. [BSGS算法]纯水斐波那契数列

    学弟在OJ上加了道"非水斐波那契数列",求斐波那契第n项对1,000,000,007取模的值,n<=10^15,随便水过后我决定加一道升级版,说是升级版,其实也没什么变化,只 ...

  4. javascript:算法之斐波那契数列

    一 //1,1,2,3,5,8,13,21这个数列 斐波那契 数列(肥波哪弃) //得到第9项是几? /*******************************111111111递归的思想*** ...

  5. Python算法_斐波那契数列(10)

    写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项.斐波那契数列的定义如下: F(0) = 0,   F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 ...

  6. python之斐波那契数列递归推导在性能方面的反思

    在各种语言中,谈到递归首当其冲的是斐波那契数列,太典型了,简直就是标杆 一开始本人在学习递归也是如此,因为太符合逻辑了 后台在工作和学习中,不断反思递归真的就好嘛? 首先递归需要从后往前推导,所有数据 ...

  7. java递归 斐波那契数列递归与非递归实现

    递归简单来说就是自己调用自己, 递归构造包括两个部分: 1.定义递归头:什么时候需要调用自身方法,如果没有头,将陷入死循环 2.递归体:调用自身方法干什么 递归是自己调用自己的方法,用条件来判断调用什 ...

  8. [剑指offer] 7. 斐波那契数列 (递归 时间复杂度)

    简介: 杨辉三角每条斜线上的数之和就构成斐波那契数列. 思路: 参考文章:https://mp.weixin.qq.com/s?src=11&timestamp=1551321876& ...

  9. DP思想在斐波那契数列递归求解中的应用

    斐波那契数列:1, 1, 2, 3, 5, 8, 13,...,即 f(n) = f(n-1) + f(n-2). 求第n个数的值. 方法一:迭代 public static int iterativ ...

随机推荐

  1. anime.js 简单入门教程

    anime.js是一个强大的用来制作动画的javascript库,虽然功能没有GASP(greensock)强大,但胜在它足够轻便,gzip压缩完只有9kb左右,麻雀虽小,却五脏俱全. 下面就来看看如 ...

  2. 记录以下docker的基本命令

    docker search xxx(tag)      在OFFICIAL上ok的是官方镜像    这里也可以去dockerhub上面看到   搜索xxx镜像docker images查看本地所安装的 ...

  3. UWB DWM1000 跟随小车原理---一张图演示

    更多内容参考论坛:bphero.com.cn

  4. vue自定义键盘事件

    //自定义全局按键修饰符 Vue.config.keyCodes.f2 = 13;//enter为13此时F2==ENTER 调用;@keyup.f2='addData()'

  5. PHP中获取某个网页或文件内容的方法

    1. 通过file_get_contents()函数$contents = file_get_contents('http://demo.com/index.php');echo $contents; ...

  6. 数据分析——pyecharts

    导入类库 from pyecharts import Pie, Bar, Gauge, EffectScatter, WordCloud, Map, Grid, Line, Timeline impo ...

  7. 安装xlwt和xlrd

    因为想用python实现读写excel.百度了下,要安装xlwt和xlrd,网上各种方法,很多都不便利.最后利用pip安装很方便. 第一步:浏览器检索“xlwt安装”,点击第一个网页(百度) 即出现如 ...

  8. linux系统资源监控

    top命令 1.平均负载(load average): 正在耗费CPU进程与正在等待io的进程之和,三个值分别是一分钟,五分钟,十五分钟的平均负载,负载值只要小于CPU颗粒数属于正常情况 任务进程(T ...

  9. IIS 程序池与Site 导出、导入

    如何在IIS7或IIS7.5中导入导出站点及应用程序池. 为实现负载平衡,我们可能会使用多个WEB服务器,也就会需要给多个IIS配置同样的站点和应用程序池.那么我们需要一个一个的重新建吗?当然不用,我 ...

  10. org.hibernate.hql.internal.ast.QuerySyntaxException: XXX is not mapped

    异常情况: 最近在把一个项目拆分多个 module 的时候数据库查询遇到这个异常:org.hibernate.hql.internal.ast.QuerySyntaxException: Identi ...