用递归实现斐波那契数列 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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 云从的多粒度网络(MGN)的结构设计与技术实现-ReID行人重识别「建议收藏」

    云从的多粒度网络(MGN)的结构设计与技术实现-ReID行人重识别「建议收藏」云从的多粒度网络(MGN)的结构设计与技术实现-ReID1.摘要全局特征和局部特征的结合是提高人的再识别(re-ID)任务识别性能的一种有效方法。以前的基于部分的方法主要集中在定位具有特定预定义语义的区域来学习局部表示,这增加了学习的难度,但对具有较大方差的场景却没有效率或鲁棒性。本文提出了一种融合不同粒度判别信息的端到端特征学习策略。我们仔细设计了多粒度网络(MGN),这是一个多分支的深层网…

    2022年10月5日
    0
  • SM4加密运算_数据加密标准des采用的密码类型是

    SM4加密运算_数据加密标准des采用的密码类型是javaSM4加密运算自己的理解:sm4加密,其实就是将字符串转成byte数组,再设置一个与解密相同的字符串,将byte的数据再转成二级制的数据,进行异或的运算,得到一组没有规则的字符串!案例上面是一些算法下面是应用方法这是自己的认知,有什么不同建议可以留言,XXXX是自己加密的字符串…

    2022年10月6日
    3
  • 【算法】java 实现数组的反转

    【算法】java 实现数组的反转数组的反转原理跟冒泡排序有点像,都是通过交换位置,只不过数组的反转是交换第一个和最后一个的位置,第二个和倒数第二个的位置,冒泡排序是交互相邻两个的位置.下面看一下具体的代码实现packagetest;/***数组的反转*/publicclassTestDemo{publicstaticvoidmain(String[]args){…

    2022年5月27日
    42
  • 吐血整理 python最全习题100道(含答案)持续更新题目,建议收藏!

    吐血整理 python最全习题100道(含答案)持续更新题目,建议收藏!

    2021年7月14日
    373
  • pycharm plot不显示_python怎么安装matplotlib.pyplot

    pycharm plot不显示_python怎么安装matplotlib.pyplot如下案例,可以正常保存图像,但是plt.show()不能正常显示图像:#coding=utf-8importpandasaspdimportmatplotlib.pyplotaspltdata=pd.read_csv(‘ccpoints.csv’,header=0)plt.scatter(data.x,data.y,c=&amp;amp;quot;red&amp;amp;quot;,marker=’o’,l…

    2022年8月29日
    4
  • selenium-PO模式

    selenium-PO模式PO模式:全称pageObject模式,使测试代码具有理想的可维护性参考:​​​​​​PO设计模式|Selenium优点:测试代码与页面的定位代码(如定位器或者其他的映射)相分离. 该页面提供的方法或元素在一个独立的类中,而不是将这些方法或元素分散在整个测试中….

    2022年5月10日
    41

发表回复

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

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