用python实现斐波那契数列

在学习高中数学“数列及其性质”一章时,了解到斐波那契数列这一内容,这篇文章主要讲述如何使用Python输出斐波那契数列

I - 斐波那契数列简介

斐波那契数列,是指这样一组数列:

1,1,2,3,5,8,13,21…

像这样,从第三位开始,每一位数都等于前面两位数的和。在数学中,它的递推公式这样表示:

a n = a n − 1 + a n − 2 , n ∈ [ 3 , + ∞ ) a_{n} = a_{n-1} + a_{n-2} , n \isin [3,+∞) an=an1+an2,n[3,+)

II - 解决方案一 - 利用递推公式实现

根据这个递推公式,能够推测出其实现方式。首先明确第一项和第二项,之后依次加和,之后得出对应数字,代码示例如下:

#Fibonacci - 斐波那契数列
#解决方案一 - 利用递推公式实现
#此处为函数形式, 其中的n表示第n项
#数据以返回的形式得到

def fibonacci(n):
    s = [1,1]
    
    if n <= 2:
        return 1
    else:
        for x in range(n-2):
            s.append(s[x]+s[x+1])
        return s[n-1]

测试代码:

while True:
    n = int(input(" --> "))
    print(fibonacci(n))

输出结果(如下图):
分别输入多组数据后程序的输出结果

注意:输入的数据不要过大,否则会报错
输入数据过大的结果= =

III - 解决方案二 - 利用通项公式实现

本人注意到,高中阶段的数学中并没有系统地讲到斐波那契数列的通项公式。查阅资料后了解到斐波那契数列的通项公式:
a n = ( 1 + 5 2 ) n − ( 1 − 5 2 ) n 5 a_n = \frac{(\frac{1+\sqrt{5}}{2}\quad)^n - (\frac{1 - \sqrt{5}}{2}\quad)^n}{\sqrt{5}} \quad an=5 (21+5 )n(215 )n

根据通项公式进行编写,代码示例如下:

def fibonacci(n):

    a = (math.pow( ((1+math.sqrt(5)) / 2 ) , n ) - math.pow( ((1-math.sqrt(5)) / 2 ) , n) )/ math.sqrt(5)
    
    return math.floor(a)
    

测试代码请看本文“解决方案一”部分~

两中解决方案比较的利弊:
解决方案一:
利: 由于只包括加减运算,计算量较小
弊: 由于涉及到递推运算,可能有点难懂……
解决方案二:
利: “套公式”,通俗易懂
弊: 由于涉及到幂运算,计算量大,从测试上就能体现

在测试程序中,解决方案一表现很好,当n取到10^5的时候,部分数值仍能计算;>
但是解决方案二则一落千丈,当n取到10^4时就报错了

IV - 应用

利用此函数,我们能轻松地得到斐波那契数列的第n项值,并且可以用此函数画出斐波那契数列的图像

注意:对于一个数列来说,他的图像并不是一个连续的曲线,而是分散的点,这里为了方便绘画和表示,作者将各点用红色线连接
横坐标在正整数集中取得,纵坐标为对应函数值

代码示例如下:

#应用 - 绘画图像
import turtle
t = turtle.Turtle()

#绘制平面直角坐标系,单位长度
t.speed(0)
t.up()
t.goto(0,0)
t.down()
t.goto(0,1000)
t.goto(0,-1000)
t.goto(0,0)
t.goto(1000,0)
t.goto(-1000,0)
t.goto(0,0)

#图像的纵坐标 y 的取值范围:0 <= y <= 1000,且 x ∈ N+ 
i = 1
t.color("red")
while fibonacci(i) <=1000:
    t.goto(i,fibonacci(i))
    i += 1

图像如图所示:
图像

=== The End ===

  • 25
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值