python实现连续数列相加_技术 | Python经典面试题解析实现斐波那契数列

8daee5ed0b060717abb70151fad0f096.png

黑马程序员

微信号:heiniu526

传智播客旗下互联网资讯,学习资源免费分享平台

大家在面试过程中经常会考到斐波那契数列,斐波那契数列(Fibonacci)最早由印度数学家Gopala提出,而第一个真正研究斐波那契数列的是意大利数学家 Leonardo Fibonacci,斐波那契数列的定义很简单,用数学函数可表示为:

236dfb29026968e8638ec4006a7b84c8.png

数列从0和1开始,之后的数由前两个数相加而得出,例如斐波那契数列的前10个数是:0, 1, 1, 2, 3, 5, 8, 13, 21, 34。

用 Python 实现斐波那契数列常见的写法有三种,各算法的执行效率也有很大差别,在面试中也会偶尔会被问到,通常面试的时候不是让你简单的用递归写写就完了,还会问你时间复杂度怎样,空间复杂度怎样,有没有可改进的地方。

1fcf05d2b62ba9d11a9aa2745bdf85bd.gif递归法

所谓递归就是指函数的定义中使用了函数自身的方法。

6cfcbddfaaf197ec865b971dc3f2b918.png

递归是一种代码最简洁的方法,但它是效率非常低,因为会出现大量的重复计算,时间复杂度是:O(1.618 ^ n),1.618是黄金分割。同时受限于 Python 中递归的最大深度是1000,所以用递归来求解并不是一种可取的办法。

1fcf05d2b62ba9d11a9aa2745bdf85bd.gif递推法

递推法就是从0和1开始,前两项相加逐个求出第3、第4个数,直到求出第n个数的值。

e0d632bdad398a9e9e5debe0892cf047.png

这种算法的时间复杂是O(n),呈线性增长,如果数据量巨大,速度越到后面会越慢。上面两种方式都是使用分而治之的思想,就是把一个大的问题化小,然后利用小问题的求解得到目标问题的答案。

1fcf05d2b62ba9d11a9aa2745bdf85bd.gif矩阵法

线性代数》是大学计算机专业低年级的课程,这门课教的就是矩阵,那时候觉得这东西学起来很枯燥,没什么用处,工作后你才发现搞机器学习、数据分析、数据建模时大有用处,书到用时方恨少。其实矩阵的本质就是线性方程式。

斐波那契数列中两个相邻的项分别为:F(n) 和 F(n - 1),如果把这两个数当作一个2行1列的矩阵可表示为:

72a2e56992db5a5db3f3b4a5562787ab.png

因为 F(n) = F(n-1)+F(n-2),所以就有:

0bc714982d77d9509b62ded592b6e1f3.png

通过反推,其实它是两个矩阵的乘积得来的:

a767c1d7b6c1f7112618bb370772caae.png

依此类推:

e18c635a24ed29ae89439b939db09fc1.png

最后可推出:

18a2b27ba6e354563f138cef889d25f6.png

因此想要求出F(n)的值,只要能求出右边矩阵的n-1次方的值,最后求得两矩阵乘积,取新矩阵的第一行的第一列的值即可,比如n=3时:

8b5aecf61f09d2a52965869443e958cc.png

可以得知F(3)的值2,F(2)的值为1,因为幂运算可以使用二分加速,所以矩阵法的时间复杂度为 O(log n)。

我们可以用科学计算包 numpy 来实现矩阵法:

6c35861e65ebcd277751c3063e7b2f2c.png

1fcf05d2b62ba9d11a9aa2745bdf85bd.gif总结

3种不同的算法效率对比:

1103e5fca8860f6508b5147a1d705b2e.png

从上面图可以看出递归法效率惊人的低,矩阵法在数据量比较大的时候才突显出它的优势,递推法随着数据的变大,所花的时间也越来越大。

6aa543f46baeddf0286c6d908c832bcb.gif干货不错就点下在看f43aa1c4c7eb1193e56fbc2bc007d86d.gif

▼点击 加程序员交流群

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/272979.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

广西2021高考成绩位次查询,2020年广西高考一分一段表及高考位次成绩排名查询(理科+文科)...

一、2020年广西高考一分一段表查询排名方法广西招办(考试院)会公布的省市高考每一分分数的考生数额统计表就是我们所说的——高考“一分一段表”,其显示出每一分的分数值全省考生有多少名,就可以让考生估算出自己的排名位次。2020年广西高考一分一段表排…

台式计算机单核与双核,什么是单核cpu、双核cpu 单核cpu和双核cpu的区别是什么...

在买电脑的时候,我们经常会发愁,究竟是买单核cpu好,还是买双核cpu比较好,尤其是面对售货员把单核cpu电脑和双核cpu电脑都可以夸的天花乱坠的时候,我们更糊涂了,究竟买哪种好呢?针对这种情况,小…

美国计算机生物学要求,美国大学CS专业分支生物信息学和计算生物学专业 Bioinformatics and Computational Biology介绍...

美国留学申请美国大学计算机专业(CS)的学生非常多。美国大学CS专业的研究分支也非常 多,不同分支对学生的要求也会不同,因此,学生们要根据自己的条件选择适合自己的研究方向。下面主要为大家介绍的是美国大学CS专业分支生物信息学和计算生物学…

Spark入门实战系列--8.Spark MLlib(上)--机器学习及SparkMLlib简介

【注】该系列文章以及使用到安装包/测试数据 可以在《倾情大奉送--Spark入门实战系列》获取 1、机器学习概念 1.1 机器学习的定义 在维基百科上对机器学习提出以下几种定义: l“机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能&#xff0c…

计算机基础cpu知识,CPU基础知识: DIY装机小白必看的CPU知识扫盲

CPU也就是中央处理器,全拼为Central Processing Unit,在计算机中可以比喻成人的大脑。它是一块超大规模的集成电路,是一台计算机的运算核心和控制核心。它的功能主要是解释计算机指令以及处理计算机软件中的数据。下面华强电子网的小编分享一…

mvc html validator,ASP.NET MVC实现Validation验证器扩展

今天介绍在ASP.NET MVC实现Validation验证器扩展,通过使用Controller验证并不是最好的方法:验证过于分散,容易造成重复代码,不利于维护与扩展,因此本节将使用MVC默认绑定器(DefaultModelBinder)中包含了验证架构,并实现Validation验证器扩展&…

自定义列表视图

通过继承BaseAdapter写一个子类,可以创建自定义列表视图: public class MyListAdapter extends BaseAdapter { private LayoutInflater mInflater;//声明一个LayoutInflater类变量 private Context mContext;//声明一个Context类变量 priva…

springmvc请求返回一个字符_SpringMVC系列之Web利器SpringMVC

课程简介:课程目标:了解SpringMVC和Spring的关系,能够使用SpringMVC框架开发自己的Web应用。整合Spring , SpringMVC , MyBatis搭建项目开发环境,理解三层架构和MVC模式适用人群:适合对Java基础知识应用自如&#xff0…

一次完整较为渗透过程

步骤一: 利用阿D浏览器通过https://s.bt.gg 注入关键字扫描发现注入点: http://www.rqyl.gov.cn/*****.php?ID153 用啊D跑不出账号密码 步骤二: 手工注入http://www.rqyl.gov.cn/*****.php?ID153 and 11 、and12出错 猜字段ht…

计算机网络线路争用,计算机网络系统集成复习要点

计算机网络系统集成复习要点计算机网络系统集成复习要点1.在信息领域,对于系统集成一般分为软件集成、硬件集成和网络系统集成。2.按网络覆盖范围的大小,将计算机网络分为局域网(LAN)、城域网(MAN)、广域网(WAN)和互联网。3. 计算机网络拓扑结构是指一个…

v380pro设备连接失败_天猫精灵可以连接台式电脑使用吗?需要什么东西? 安装操作是哪几个步骤? 最好有图片解说!...

使用语音将天猫精灵调到【蓝牙配对】;打开电脑的蓝牙适配界面,让电脑找到天猫精灵,稍等片刻,点击【使用远程装置的扬声器聆听来自此PC的音频】后的连接;最后调整音量即可。以下是详细介绍:1、对天猫精灵说【…

IDE-Ecplise-代码注释 模版 编码规范 配色

说明: 代码注释主要用于方便代码后期维护,编码规范,增加代码阅读性和维护性。因网上看到的很多博客中片段局多,故整理后重写一篇,方便交流学习。 先看下加过注释模版后的效果。如上图所示,创建类&#xff0…

个人信息管理系统代码_学生信息管理系统(springboot + vue)

学生信息管理系统零、基础项目为前后分离项目1、前端(front-end)基于 vue-admin-template 开发2、后端(rear-end)Jdk8Maven3MySQL5.7SpringBoot2SQLYog一、功能模块图图片.png二、系统预览1、登录登录.png2、首页首页.png3、查看学生信息查看学生信息.png4、编辑学生信息编辑学…

苹果手机6s运营商在哪里显示无服务器,iPhone6s信号很弱或无服务如何解决【解决方法】...

很多果粉都遇到过自己的手机常常“无服务”或者信号很弱的情况。 iphone6s 信号很弱或无服务怎么办?iPhone手机信号不好的原因有很多,排除SIM卡,手机本身硬件故障等问题,你可以尝试以下方法“修复”你的手机信号问题。1、开关飞行…

72年属鼠48岁有一灾2020_李半仙推算:1972年虚岁48岁属鼠人,2020年干什么最能发财??...

李半仙推算:1972年虚岁48岁属鼠人,2020年干什么最能发财??生肖属鼠的朋友,在未来,喜事接二连三,属鼠人能够得到财神赐福,一路大发特发,很快就会有发财致富的商机,加上属鼠…

vue怎么插入接口demo_前端学起来特别吃力,新人入前端怎么学?

最近知乎收到一些问题,问前端学起来吃力,连续更新几次回答的比较全了。现在整理下分享给掘金的小伙伴们。原知乎问题:前言前端工作两年多。大部分前端原理、框架都能完全运用。工作中几乎遇不到解决不了的问题(除了那些恶心无法实现的需求&am…

w7怎么重启无限服务器,w7重启数据库服务器

w7重启数据库服务器 内容精选换一换WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上搭建属于自己的网站,本文教您通过华为云虚拟私有云、弹性云服务器和RDS MySQL数据库,轻松几步,在LAMP环境下搭…

顺德机器人应用与维修专业收入_保定万维科技技校专业课程巡礼——计算机应用与维修...

保定万维科技技工学校院校简介 / 专业设置 / 招生简章资助政策 / 在线报名点击上方蓝色字体【保定万维科技技工学校】关注我们专业简介:本专业培养适应企事业单位发展、应用的需要,具有扎实的计算机基础知识、计算机专业知识和较强的计算机办公自动化、数…

PC和服务器的IP地址信息DNS,PC和服务器的IP地址信息DNS

PC和服务器的IP地址信息DNS 内容精选换一换网站的访问与云服务器的网络配置、端口通信、防火墙配置、安全组配置等多个环节相关联。任意一个环节出现问题,都会导致网站无法访问。本节操作介绍网站无法访问时的排查思路。网站无法访问怎么办?如果打开网站…

abaqus生成adams柔性体_专栏 | HyperMesh_To_Abaqus接口——模型导入导出问题

作者介绍TechmanLXS硕士十余年工程经验擅长Hypermesh建模,Hyperworks全平台分析软件,abaqus软件。整车级被动安全(ls-dyna、Radioss),零部件级(moldflow模流分析,塑料件联合仿真分析)。熟知汽车车身,内外饰&#xff0c…