斐波那契數列,簡單地說,起始兩項爲0和1,此後的項分別爲它的前兩項以後。python
(注:據我百度發現,斐波那契數列的定義並不是起始的兩項爲0和1,而是1和1,鑑因而轉發的,在這裏不對原做者的文章進行改動,由於,代碼的思想是沒有問題的。)app
實現方式一:
根據這一特性,可採用最簡單的方法計算該項,循環計算每項的值,如下爲python實現代碼,輸出該數列的前num項函數
# -*- coding:utf-8 -*- def printFibo(num): a = 0 b = 1 i = 0 while i < num: print a a,b = a, a+b i += 1 #原做者代碼有誤 #修改後 def printFibo(num): a = 1 b = 1 i = 0 while i < num: print(a) a,b = b, a+b i += 1 xxx = printFibo(5)
實現方式二:
考慮到從第三項開始,每一項的值都爲前面兩項的和,能夠使用遞歸的方法來計算:code
def item( num ): if num == 0 : res = 0 elif num == 1: res = 1 else: res = item ( num - 1) + item (num -2) return res def printFibo( no ): i = 0 while i < no: print item(i) i += 1
實現方式三:
以上採用的是遞歸的實現方式,相比較而言,使用迭代會更加高效,如下函數會返回一個列表:遞歸
def fibo(num): numList = [0,1] for i in range(num - 2): numList.append(numList[-2] + numList[-1]) return numList
另一種方式以下,該函數只返回某一項:utf-8
def fibo(n): x, y = 0, 1 while(n): x,y,n = y, x+y, n - 1 return x
實現方式三:
採用尾遞歸的方式來編寫it
def fibo(n): def fib_iter(n,x, y): if n == 0: return x else: return fib_iter(n-1, y, x+y) return fib_iter(n, 0, 1)