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

#题目:古典问题:有一对兔子,从出生后第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 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 语句, 以迭代器的形式来完成






posted @ 2017-03-02 14:36  枫奇丶宛南  阅读(82)  评论(0编辑  收藏  举报