1. 程式人生 > >LintCode Python 入門級題目 斐波納契數列

LintCode Python 入門級題目 斐波納契數列

ima 算法 app mage 個數字 img ... 分享 spa

原題描述:

查找斐波納契數列中第 N 個數。

所謂的斐波納契數列是指:

  • 前2個數是 0 和 1 。
  • i 個數是第 i-1 個數和第i-2 個數的和。

斐波納契數列的前10個數字是:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34 ...

題目分析:

開始的想法,通過遞歸實現輸出fib(n-1)+fib(n-2)的值計算,原理正確,算法復雜度高,導致運行時間超過lintcode限制:

class Solution:
    # @param n: an integer
    # @return an integer f(n)
    # 遞歸實現
    def fibonacci(self, n):
        if n == 1:
            return 0
        elif n == 2:
            return 1
        else:
            return self.fibonacci(n-1) + self.fibonacci(n-2)
技術分享


修改為叠代實現,將斐波納契數保存到列表中,循環n-2次,每次將數列最後一個元素[-1]和倒數第二個元素[-2]相加並追加到列表中,最終返回列表最後一個元素~

class Solution:
    # @param n: an integer
    # @return an integer f(n)
   # 通過for循環叠代實現
    def fibonacci(self, n):
        num = [0,1]
        if n == 1:
            return 0
        elif n ==1:
            return 1
        for i in range(0,n-2):
            num.append(num[-1] + num[-2])
        return num[-1]

  

  

LintCode Python 入門級題目 斐波納契數列