您的位置:首页 > 编程语言 > Python开发

python 中斐波那契数列的那些事

2016-04-03 00:00 429 查看
# 问题分析
# 斐波那契数列 用 递归实现会产生大量的重复的子序列
# fib(3)= fib(2) + fib(1) = fib(1) + fib(0) + fib(1) 逐次递归
# 如何避免不算重复的子序列?
memo = {0:0, 1:1}
def fib(n):
if n not in memo:
memo
= fib(n-1)+fib(n-2)
return memo
[fib(i) for i in range(10)]
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
感悟:
1.字典也可以迭代
2.字典迭代出的值是key
3.取字典的值用dict[key]  记住key 应该被【】列表包围
4.if not varible in memo:  if 不仅可以用 判断在里面 还以用来判断不在里面
# 问题: 还有无其他解法
def fib1(n):
a, b = 0, 1
for i in range(n):
a, b = b, a+b
return a
感悟:
1.原来的两个数字a,b,用新的两个数字去替换
2.a <----b
3.b <----a + b
4.交换两个数字 a,b = b ,a
5.返回值 <----- a
[fib1(i) for i in range(10)]
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: