#假如兔子都不死,问每个月的兔子总数为多少?
#通过数学分析我们知道,兔子的规律为数列1,1,2,3,5,8,13,21....
#程序分析:因此只需要按照数学的规律来进行计算就OK了
# _*_ coding:utf-8 _*_ def count1(n): last1, now1 = 1 next1 = 1 for i in range(n): if i < 2 : next1 = 1 else: next1 = last1+now1 last1=now1 now1=next1 print next1, return next1 print '\n最终结果是%d' % (count1(6))
然后我们发现这个问题,这个数字规律很熟悉,这正是 斐波那契数列
类似的方式输出斐波那契數列前 N 个数 # _*_ coding:utf-8 _*_ def fab(max): n, a, b = 0, 0, 1 while n < max: print b , a, b = b, a + b n = n + 1 fab(8)
结果:
============================= >>> 1 1 2 3 5 8 13 21 >>>
如果使用这种方法,直接在 fab 函数中用 print 打印数字会导致该函数可复用性较差,因为 fab 函数返回 None,其他函数无法获得该函数生成的数列。
要提高 fab 函数的可复用性,最好不要直接打印出数列,而是返回一个 List。
但是如果使用List, 当传进来的参数过大的时候, 会占用许多内存。
我们既想代码简单,又想占用内容小, 就需要使用迭代器了
# _*_ coding:utf-8 _*_ def fab(max): n, a, b = 0, 0, 1 while n < max: yield b # print b a, b = b, a + b n = n + 1 for i in fab(6): print i,
也就是说将函数中的打印语句 换成 yield 语句, 以迭代器的形式来完成