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


相关推荐

  • 递归算法php,php递归算法经典实例「建议收藏」

    递归算法php,php递归算法经典实例「建议收藏」PHP递归算法就是函数调用函数了操作非常的简单了,我们下面来给各位介绍PHP递归算法及实际的一些关于递归的用法。递归函数为自调用函数,在函数体内直接或间接自己调用自己,但需要设置自调用的条件,若满足条件,则调用函数本身,若不满足则终止本函数的自调用,然后把目前流程的主控权交回给上一层函数来执行,可能这样给大家讲解,还是很难明白,直接上例子functiontest($n){echo$n.”…

    2022年8月11日
    6
  • CAS Authentication failed!

    CAS Authentication failed!

    2021年9月3日
    71
  • realsense深度图像保存方法

    realsense深度图像保存方法一般使用realsense时会保存视频序列,当保存深度图像时,需要注意保存的图像矩阵的格式,不然可能造成深度值的丢失。在众多图像库中,一般会使用opencv中的imwrite()函数进行深度图像的保存。一般深度图像中深度值的单位是mm,因此一般使用np.uint16作为最终数据格式保存。例子:importnumpyasnpimportcv2deffun1(…

    2022年4月25日
    188
  • java获取当前时间戳的方法「建议收藏」

    java获取当前时间戳的方法「建议收藏」获取当前时间戳//方法一System.currentTimeMillis();//方法二Calendar.getInstance().getTimeInMillis();//方法三newDate().getTime();获取当前时间SimpleDateFormatdf=newSimpleDateFormat(“yyyy-MM-ddHH:mm:ss”);//设置日期格式Stringdate=df.format(newDate());//newDate()为获取

    2022年4月28日
    650
  • linux dp接口显示,什么是DP接口?DP接口有哪些用处?

    原标题:什么是DP接口?DP接口有哪些用处?DisplayPort(简称DP)是一个由PC及芯片制造商联盟开发,视频电子标准协会标准化的数字式视频接口标准。它是第一个依赖数据包化数据传输技术的显示通信端口。DP接口主要用于视频源与显示器等设备的连接,并也支持携带音频、USB和其他形式的数据。DP接口常见设备有笔记本电脑、显示器、家庭影院等。DP接口可以简单理解成HDMI的加强版,在音频和视频传输…

    2022年4月9日
    94
  • pycharm2.5 永久激活码破解方法

    pycharm2.5 永久激活码破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    126

发表回复

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

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