Python 网络爬虫实战
上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 python
          2 #-*- coding: utf-8-*-
          3 __author__ = 'hstking hstking@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 = raw_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, xrange(3,51))
         21           if lenth in lenList:
         22              print(u’输入的长度符合标准,继续运行’)
         23           else:
         24              print(u’只能输入3-50,太长了不是算不出,只是没必要’)
         25                exit()
         26
         27
         28 if __name__ == '__main__':
         29      f = Fibonacci()

输入:wq,保存fibonacci.py。fibonacci.py用于创建一个定长列表,该列表就是斐波那契数列。执行命令:

        python fibonacci.py

得到的结果如图3-2所示。

图3-2 fibonacci数列

Python有独特的列表类型,在获取递归队列时有独特的优势。