不久前,我们学习了迭代器, 其中有个练习:我们想要通过for...in...循环来遍历迭代斐波那契数列中的前n个数,要求用迭代器实现。
斐波拉契数列(Fibonacci),简单地说,数列中第一个数为0,第二个数为1,其后的每一个数都可由前两个数相加得到:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
迭代器实现方式如下:
class Fibonacci(object ): def __init__ (self , n): self .n = n self .a = 0
self .b = 1
self .current_num = 0
def __next__ (self ): if self .current_num < self .n: num = self .a self .a, self .b = self .b, self .a + self .b self .current_num += 1
return num else : raise StopIteration
def __iter__ (self ): return self
fib = Fibonacci(10 )
for temp in fib: print (temp)
根据斐波那契数列的特性,我们可以用最简单的循环遍历以及变量的值交换的方法实现,代码如下: def fibonacci (num): a, b, i = 0 , 1 , 0
while i < num: print (a) a, b = b, a+b i += 1
fibonacci(10 )
考虑到从第三项开始,每一项的值都为前面两项的和,可以使用递归的方法来计算: def fibonacci(n): if n < 2 : return n else : return fibonacci(n-1 ) + fibonacci(n-2 )
for i in range (10 ): print (fibonacci(i))
生成器实现。生成器是一种特殊的迭代器,前面说到迭代器的实现方法,那么我们也可以用生成器来实现,而且生成器比迭代器代码更加简洁: def fibonacci(n): i = 0
a, b = 0 , 1
while i < n: yield a a, b = b, a + b i += 1
fib = fibonacci(10 )
for temp in fib: print (temp)
实现斐波那契数列的方法有很多,以上仅仅是我个人在平时的一个总结,欢迎大家 列出你们的方法 |