-
def fibonacci1(n: int) -> []:
"""
这个是使用 a,b=b,a 的技术求斐波那契数列
:param n: n是斐波那契数列的序号
:return: 以key为序号,以val为值的斐波那契数列的字典
"""
while n < 1:
n = int(input("请输入正整数:"))
dict1 = {}
if n == 1:
dict1[0] = 1
else:
a = 0
b = 1
for i in range(1, n + 1):
dict1[i] = b
a, b = b, a + b
print(dict1.values())
return dict1
def fibonacci2(n: int, dict1: {} = {}) -> {}:
"""
通过迭代+闭包的方式求斐波那契数列
:param n: 序号
:param dict1: 使用这个可以在多次斐波那契数列的计算中节省次数,要么不填,要么默认为{}
:return: 以key为序号,以val为值的斐波那契数列的字典
"""
# 下面这句代码是根据把空dict1生成 {0: 0, 1: 1}
if len(dict1) < 2:
dict1.clear()
dict1[0] = 0
dict1[1] = 1
while n < 1:
n = int(input("请输入正整数:"))
def fibonacci2_sub(m: int) -> int:
"""
通过迭代的方式求斐波那契数列,dict1节省了计算次数
:param m:m是序号
:return:返回的是序号为m的斐波那契数列的值
"""
if m not in dict1:
dict1[m] = fibonacci2_sub(m - 1) + fibonacci2_sub(m - 2)
return dict1[m]
fibonacci2_sub(n)
print(dict1.values())
return dict1
if __name__ == "__main__":
fibonacci1(12)
ff = {}
fibonacci2(12, ff)
fibonacci2(13, ff)
- 使用生成器
def fibonacci3(n: int) -> {}:
def fibonacci3_sub(m: int):
"""
这个是通过生成器求斐波那契数列
:param m: 序号
:return: None
"""
if m < 2:
pass
else:
a = 1
b = 1
for i in range(1, m + 1):
yield a
b, a = a + b, b
iter1 = fibonacci3_sub(n)
dict1 = dict()
for index, val in enumerate(iter1):
dict1[index + 1] = val
return dict1
if __name__ == "__main__":
print(fibonacci3(12))
网友评论