10_python_练习题——兔子问题与斐波那契數列

来源:互联网 发布:奇虎软件怎么样 编辑:程序博客网 时间:2024/05/21 08:42
#题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,
#假如兔子都不死,问每个月的兔子总数为多少?

#通过数学分析我们知道,兔子的规律为数列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 next1print '\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 + 1fab(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 + 1for i in fab(6):    print i,

也就是说将函数中的打印语句 换成 yield 语句, 以迭代器的形式来完成






1 0
原创粉丝点击