用递归实现斐波那契数列 python_python斐波那契数列前30项

用递归实现斐波那契数列 python_python斐波那契数列前30项文章目录一,递归方法: 二,斐波那契数列简介: 特性一: 特性二: 两种方法运行时间对比: /一,递归方法:/递归方法为:将问题一步步分解,直到得到可以解决的简单问题。通常涉及直接或间接条用自身:例如计算列表(1,3,5,7,9,13)中各元素的和。直接或间接调用sum()函数自身:python实现如下:In[1]deflistsum(a):iflen(a)==1:r…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

 

文章目录

   

   

   

   


/ 一,递归方法: /




递归方法为:将问题一步步分解,直到得到可以解决的简单问题。

通常涉及直接或间接条用自身:

例如计算列表(1,3,5,7,9,13)中各元素的和。


<img decoding=“>


直接或间接调用 sum()函数自身:

python 实现如下:

In[1]

def listsum(a):
   if len(a) == 1:
        return a[0] #如果列表中只有一位元素,则返回a[0]
   else:
        return a[0] + listsum(a[1:]) #返回第一位元素于剩余其他元素的和
print(listsum([1,3,5,7,9,13]))

 

Out[2]:

38

`

 




/ 二,斐波那契数列简介: /


斐波那契数列是最常见的一道面试题,又称‘兔子数列/黄金分割数列’。



1

 

   

特性一:


任一个数都是前两个数之和。

例如:

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qmKwUnXM-1589970515420)(C:\Users\weinou314\Desktop\工作台\斐波那契\images.gif)\]

因此第一种计算斐波那契数列的方法,即让数字序列的最后两个元素相加,得到新的数字并插入数列结尾。

斐波那契矩陣式解法:

用递归实现斐波那契数列 python_python斐波那契数列前30项



2

 

   

 

 

特性二:


在极限条件下,相邻两个元素的商等于一个常数。即


\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5PJqPtOG-1589970515422)(C:\Users\weinou314\Desktop\工作台\斐波那契\斐波那契 phi-1.gif)\]



3

 

   

 

 

第一种:


我们可以通过设置一个数组。

a = [0,1]

下一个要插入的数据就为“a【-1】+a【-2】”。

 

a.append(a[-1] + a[-2])

 

继续循环。循环 y 次就得到了 y 个新数字。

最后所得到的斐波那契数列中数字的个数为 n = y + 2 。

可以根据用户想要的斐波那契数字的个数 n 来定义循环次数 y。

y = n – 2

输入【1】:

def fibs1(n): #定义斐波那契函数
    a = [0] #声明a为数组
    if n <= 0:
        print('错误') #n 不能 <= 0
    else:
       
        if n > 1: 
            a = [0,1]
            for i in range(n - 2): #执行n-2次循环,即向数组a中新增n-2个斐波那契数字
                a.append(a[-2] + a[-1]) #新增数字 = 最后两个数字的和
    return a

输入【2】:

fibs1(10)

输出【2】:

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

 



 

 

 

第二种:


提前定义好数组中元素的个数,再依次设定每个值为前两个数的和。

输入【1】:

def fibs2(n): #n为需要的斐波那契数字个数
    f = [0] * n #定义包含n个0的数组
    if n <= 0:
        print('错误') #n 不能 <= 0
    else:
       if n >= 2:
            f[1] =1 #此时f = [0 , 1]
            for i in range(2,n): 
                f[i] = f[i - 1] +f[i-2]
            '''
            f[2] = f[1] + f[0] = 1,此时f = [0,1,1];三个斐波那契数字
            f[3] = f[2] + f[1] = 2,此时f = [0,1,1,2];四个斐波那契数字
             ......
            f[n-1] = f[n-2] + f[n-1];n 个斐波那契数字
            '''
    return f

输入【2】:

fibs2(10)

输出【2】:

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

 



4

 

   

 

两种方法运行时间对比:


输入【1】:

%timeit fibs1(100)
%timeit fibs2(100)

输出【1】:
26.2 µs ± 736 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
30.7 µs ± 301 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

 

将复杂的计算过程封装为一个函数存储起来,就可以避免写重复的代码。再次需要该计算的时候只需调用即可。



 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/197870.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 模拟实现strstr函数

    模拟实现strstr函数推荐一篇讲解KMP算法的文章–阮一峰http://www.ruanyifeng.com/blog/2013/05/Knuth–Morris–Pratt_algorithm.html推荐一篇讲解Boyer-Moore算法的文章–阮一峰http://www.ruanyifeng.com/blog/2013/05/boyer-moore_string_search_algorithm.html…

    2022年6月25日
    23
  • qstring如何初始化_qstringlist 初始化

    qstring如何初始化_qstringlist 初始化();//将路径赋值给strFilePath}ui->label->setText(strFilePath);QStringListfileList;dir.cd(strFilePath);//打开路径,调用dir对象的成员……(intindex,QStringkeyorvalue);//读取键名private:voidinit_com();…

    2022年6月9日
    168
  • java基础-云服务器购买

    java基础-云服务器购买小伙伴们,你们好呀!我是老寇!3年前,在阿里云买了我人生中的第一台云服务器,二话没说直接下单,看着支付宝的余额,我心如刀绞。所幸的是我熬过了这一个月。接下来我们进入正题(以阿里云为例)!目录一、操作步骤一、操作步骤1.输入阿里云网址,点击账号登录2.扫码登录->强烈建议下个阿里云APP,这样每次登陆只需要扫一扫就可以3.点击控制台,进入控制台4.完成实名认证(略)5.点击最新活动,找到开发者成长计划6.认准ECS服务器7.买Cento

    2022年5月5日
    41
  • 深度图可视化

    深度图可视化之前一直以为深度图应该是黑灰色的,不清楚为什么还有彩色的深度图,直到今天才知道原来这是深度图可视化。专门写篇博客纪念一下!灰黑色的图片人眼很难识别出其中的物体,感知深度的变化。所以才需要可视化,下面是几种颜色空间:…

    2022年4月25日
    47
  • Ribbon的负载均衡策略及原理[通俗易懂]

    Ribbon的负载均衡策略及原理[通俗易懂]LoadBalance负载均衡是用于解决一台机器(一个进程)无法解决所有请求而产生的一种算法。像nginx可以使用负载均衡分配流量,ribbon为客户端提供负载均衡,dubbo服务调用里的负载均衡等等,很多地方都使用到了负载均衡。使用负载均衡带来的好处很明显:当集群里的1台或者多台服务器down的时候,剩余的没有down的服务器可以保证服务的继续使用使用了更多的机器保证了机器的良性使用,不会由于…

    2022年10月13日
    3
  • RPM 卸载参数[通俗易懂]

    RPM 卸载参数[通俗易懂]rpm卸载参数–test:卸载测试 –nodeps:不检查依赖–noscripts:不执行脚本程序–notriggers:不执行触发程序–justdb:仅修改数据库–force强制 RPM卸载软件包,并不是简单地将原来安装的文件逐个删除,那样做的话,可能会出现这样或那样的问题。如,A软件包依靠B软件包做某些工作,若B软件包卸载了,则A软件包就

    2022年9月22日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号