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