斐波那契數列的算法實現 —— python

斐波那契數列,簡單地說,起始兩項爲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)
相關文章
相關標籤/搜索