Python | 递归函数实现斐波那契数列

一、斐波那契数列的简单介绍

1、什么是斐波那契数列?

斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……

斐波那契数列由 0 和 1 开始,之后的斐波那契数列系数由之前的两数相加得出

2、斐波那契的神奇之处

也许你觉得,这么一串数有什么用,我平常也用不到,但实际上,很多地方都有斐波那契数列的影子。

  • 兔子数列

比如,我开篇提到的“兔子数列”。假设一开始有两只兔子,一公一母,两个月后开始繁殖,一对兔子每个月能且只能生出一对小兔子来,假设兔子都不会死亡,那么一年之后可以繁殖多少对兔子?

分析:
第一个月和第二个月,兔子没有繁殖能力,所以是一对;
第三个月,兔子有了繁殖能力,生下了一对小兔子,现在兔子是两对;
第四个月,大兔子依旧可以生下一对小兔子,由于现在小兔子还未成年,没有繁殖能力,所以,现在兔子是三对;
四个月后,小兔子长大了成为了小老兔子,可以和大老兔子一起繁殖,这时候就拥有了五对兔子;
……

以此类推我就得到了这样一串数:
1,1,2,3,5,8,13,21…

  • 与黄金分割比的关系
    斐波那契数列从第三项开始,每一项都等于前两项的和。
    它的通项公式为:

[(1+√5)/2]^n /√5 - [(1-√5)/2]^n /√5 【√5表示根号5】

1÷1=1,1÷2=0.5,2÷3=0.666…,3÷5=0.6,5÷8=0.625,55÷89=0.617977……
144÷233=0.618025…46368÷75025=0.6180339886……
当而且当n趋向于无穷大时,前一项与后一项的比值越来越逼近黄金分割0.618

二、递归实现斐波那契数列

代码:

def fibo(n):
    """递归函数实现斐波那契数列"""
    if n == 1 or n == 2:
        return 1
    else:
        return fibo(n-1) + fibo(n -2)


if __name__ == '__main__':
    n = int(input("请输入数列的项数:"))
    res = fibo(n)
    print(res)

运行结果:

请输入数列的项数:9
34

三、一行代码实现斐波那契数列

n = int(input("请输入数列的项数:"))
fibo = [x[0] for x in [(a[i][0], a.append([a[i][1], a[i][0]+a[i][1]])) for a in ([[1, 1]], ) for i in range(n)]]
print(fibo)
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页