Fibonacci Number - 斐波那契数列
相关资料:Fibonacci
L = [0, 1, 1, 2, 3, 5…]
L[i] = L[i+1] + L[i+2]
[27]是生成数列的函数
[28]和[29]读取的方法
- 用itertools.islice访问
官方文档:itertools.islice
语法:islice(iterable, start, stop)
第一个参数只要能转换成iterable就可以,第二三个参数是起止位置
返回值是一个iterable的对象,再转成list就能看见内容了。
既然如此,那就可以直接写上起止点访问数列了。牛皮…
- 递归生成Fibonacci sequence
可以是可以,但是很明显花的时间非常久。原因:很多地方有重复计算。
e.g. f(5) = f(4)+f(3), f(6) = f(5)+f(4),本来已经有f(5)了,但是算f(6)的时候,又重新算了一次f(5)
函数的默认参数
-
正常情况下没啥可说的,见下图:
-
不正常的情况
重新定义下function,默认参数是一个list。
明显[108]正确输出,但是[109]的结果却不对。
原因:这个默认的list L=[0] 一直在内存中,每次调用function修改的都是他自己,返回的也是他自己,所以就会变成这样。
正确处理这种情况:
用默认参数去存储Fibonacci Sequence
有了前面这个骚操作,那么不就可以用个list去存储数列了么,字典和列表什么的都可以
hanoi - 汉诺塔
玩法:如下图,有ABC三根棍儿,要求把一坨disk移动到另一根棍儿上,每次只能移动一个disk,小的必须放在大的上面。
文字介绍
动画演示
- 老师的代码
解释: