上QQ阅读APP看书,第一时间看更新
3.2 斐波那契数列
斐波那契数列(Fibonacci sequence)又称黄金分割数列,因数学家列昂纳多·斐波那契(Leonardoda Fibonacci )以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34……在数学上,斐波那契数列以如下递归的方法定义:F(0)=0、F(1)=1、F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)。
3.2.1 Project分析
从斐波那契数列的定义上可以看出,求斐波那契数列最正统的方法就是函数递归。不过,对于Python而言,还有更加简单的方法操作。这得益于Python独有的数据类型——列表。Python列表可以使用append方法在列表的尾部追加数据。这样一来,求斐波那契数列就成了简单的加法游戏,无须递归求解了(可惜C语言中没有变长数列,否则在C语言中求斐波那契数列也很简单)。
3.2.2 Project实施
【示例3-2】编写fibonacci.py,打开Putty连接到Linux,执行命令:
cd code/crawler vi fibonacci.py
fibonacci.py的代码如下:
1 #!/usr/bin/env python3 2 #-*- coding: utf-8 -*- 3 __author__ = 'hstking hst_king@hotmail.com' 4 5 6 class Fibonacci(object): 7 '''返回一个fibonacci数列 ''' 8 def __init__(self): 9 self.fList = [0,1] #设置初始列表 10 self.main() 11 12 def main(self): 13 listLen = input('请输入fibonacci数列的长度(3-50):') 14 self.checkLen(listLen) 15 while len(self.fList) < int(listLen): 16 self.fList.append(self.fList[-1] + self.fList[-2]) 17 print('得到的fibonacci数列为:\n %s ' %self.fList) 18 19 def checkLen(self,lenth): 20 lenList = map(str,range(3,51)) 21 if lenth in lenList: 22 print('输入的长度符合标准,继续运行') 23 else: 24 print('只能输入3-50,太长了不是算不出,只是没必要') 25 exit() 26 27 28 if __name__ == '__main__': 29 f = Fibonacci()
按Esc键,进入命令模式后输入:wq,保存fibonacci.py。fibonacci.py用于创建一个定长列表,该列表就是斐波那契数列。执行命令:
python fibonacci.py
得到的结果如图3-2所示。
图3-2 fibonacci数列
Python有独特的列表类型,在获取递归队列时有独特的优势。