Python网络爬虫实战(第2版)
上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,nN*)。

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有独特的列表类型,在获取递归队列时有独特的优势。