Python算法_三種斐波那契數列算法


斐波那契數列(Fibonacci sequence),又稱黃金分割數列、因數學家列昂納多·斐波那契(Leonardoda Fibonacci)以兔子繁殖為例子而引入,故又稱為“兔子數列”,指的是這樣一個數列:0、1、1、2、3、5、8、13、21、34、……在數學上,斐波那契數列以如下被以遞推的方法定義:F(1)=0,F(2)=1, F(n)=F(n - 1)+F(n - 2)(≥ 3,∈ N*

 

本文章要解決的問題是:

1、生成前n項斐波那契數列
2、求第n項斐波那契數列的值是多少
3、給定終止值,生成此前斐波那契數列
 

1、求第n項斐波那契數列的值是多少(普通版)

根據通項公式遞歸求值,此種方法雖代碼簡潔卻效率太低

1 def Fibonacci(n):
2     if n == 1:  # 如果n=1,返回0
3         return 0
4     elif n == 2:  # 如果n=2,返回1
5         return 1
6     else:
7         return Fibonacci(n-1) + Fibonacci(n-2)  # 通項公式 F(N) = F(N-1) + F(N-2)

 

2、求第n項斐波那契數列的值是多少(快速版)

由於遞歸自頂向下的方式效率太低,我們采用自底向上的方式,先將數值正向放入列表中,最后從列表中取值。

 1 def Fibonaccii(n):
 2     seq = [0,1]  # 初始列表怕[0,1]
 3     if n == 1:  # 如果n=1,返回[0]
 4         return [0]
 5     elif n == 2:  # 如果n=2,返回[0,1]
 6         return [0,1]
 7     else:
 8         for i in range(n-2):  # 循環往列表中添加數列,初始已有兩項故添加項數為n-2
 9             seq.append(seq[i]+seq[i+1])  # 添加的數列值等於前兩項的和
10         return seq[-1]  # 取最后一項的值

 

3、給定終止值,生成此前斐波那契數列

隨便給定一個數字,求不大於此數值的斐波那契數列

def Fibonacciii(n):
    seq = [0,1]  # 初始化列表
    i = 0  # 初始i
    if n == 0:  # 如果n=0,返回列表[0]
        return [0]
    else:
        if n <= 3:  # 如果0<n<3
            for i in range(n):  # 循環往初始列表中添加斐波那契數列
                seq.append(seq[i]+seq[i+1])
            return seq
        else:  # 如果n > 3
            while True:  # 理論上當n 不確定時,需要添加的項數也是不確定的,故死循環
                if seq[-1] <= n:  # 一直添加,如果添加的最后一項不大於給定值
                    seq.append(seq[i]+seq[i+1])
                    i += 1  # 每次循環i 遞增
                    continue  # 繼續循環,不執行以下代碼
                break  # 當最后一項大於給定值時,跳出死循環
            return seq[0:-1]  # 最后返回去掉最后一個數值的斐波那契數列

 

4、求前n項斐波那契數列

 1 def Fibonaccii(n):
 2     seq = [0,1]  # 初始化列表
 3     if n == 1:  # n=1,返回[0] 
 4         return [0]
 5     elif n == 2:  # n=2,返回[0,1]
 6         return [0,1]
 7     else:
 8         for i in range(n-2): # n>2,循環添加數列到初始列表中
 9             seq.append(seq[i]+seq[i+1])
10         return seq 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM