欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

剑指offer算法题【8】:斐波那契数列(Python实现)

程序员文章站 2024-03-18 10:00:04
...

题目:

       大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。

 

1. 思路

      思路(1):递归,虽然递归可以做,但是复杂度太高,有很多重复计算,比如计算10的斐波那契数列:

剑指offer算法题【8】:斐波那契数列(Python实现)

这样就有很多重复计算。

     思路(2):自底向上循环计算,从下往上加,一直加到n

 

2. 代码

import time


class Solution:

    # 思路1:直接递归
    def fbnq(self,n):
        if n == 0:
            return 0
        elif n == 1:
            return 1
        elif n > 1:
            return self.fbnq(n-1)+self.fbnq(n-2)


    # 思路2:自下往上逐层计算(防止递归重复计算太多,时间复杂度O(n))
    def fbnq2(self,n):
        base_num = [0,1]
        num_one = base_num[0]
        num_two = base_num[1]
        if n<2:
            return base_num[n]
        else:
            for i in range(2,n+1):
                fbnq = num_one + num_two
                num_one = num_two
                num_two = fbnq
            return fbnq



if __name__ == '__main__':
    s = Solution()
    t1 = time.time()
    print(s.fbnq(40))
    print("递归计算40的斐波那契数列所用的时间:",time.time()-t1)
    t2 = time.time()
    print(s.fbnq2(40))
    print("自下往上循环计算40的斐波那契数列所用的时间:",time.time()-t2)

 

3. 运行结果

剑指offer算法题【8】:斐波那契数列(Python实现)