剑指offer算法题【8】:斐波那契数列(Python实现)
程序员文章站
2024-03-18 10:00:04
...
题目:
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。
1. 思路
思路(1):递归,虽然递归可以做,但是复杂度太高,有很多重复计算,比如计算10的斐波那契数列:
这样就有很多重复计算。
思路(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)