斐波那契数列:以澳大利亚兔子繁殖的问题而引入的数列,也称为‘兔子数列’
斐波那契的具体表现形式是:1,1,2,3,5,8,13,21......
其通项公式为:F(n) = F(n-1)+F(n-2)
从其通项公式来看,有点类似于python中的递归函数,先试着使用递归函数解决斐波那契数列
def fibo_sequnece(n):
"""定义一个斐波那契数列,求第n项的数值"""
if n in (1, 2):
return 1
else:
return fibo_sequnece(n-1)+fibo_sequnece(n-2)
这个函数就是直接利用斐波那契数列的通项公式进行求解,当n>3的时候,函数递归求解数值
还有一种递归的形式,在函数传参的时候,直接指定斐波的第一项和第二项的数值,然后直接递归一个函数
def fibo_sequence(n, first, second):
if n == 1:
return first
else:
return fibo_sequence(n-1, second, first+second)
再有一种就是求斐波那契数列的前n项的所有数值,利用生成器函数来实现
所谓生成器函数,就是包含yeild关键字的函数,通俗一点说,当函数被唤醒的时候执行,遇到yield关键字就停下并返回yield右边的数值,当函数被再次唤醒的时候,接着前面的继续执行
def fibo_sequence(n):
"""生成器函数执行斐波那契数列前n项"""
first = 1
second = 1
for i in range(n):
yield first
first, second = second, first +second
最后,关于斐波那契数列的第一项到底是0还是1,这个各有各的说法,但是不影响斐波那契数列的特点,如果认为第一项是0的话,那么第一种递归函数可能就要稍加修改,但原理还是一样的