10_python_练习题——兔子问题与斐波那契數列
#题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,
#假如兔子都不死,问每个月的兔子总数为多少?
结果:
如果使用这种方法,直接在 fab 函数中用 print 打印数字会导致该函数可复用性较差,因为 fab 函数返回 None,其他函数无法获得该函数生成的数列。
要提高 fab 函数的可复用性,最好不要直接打印出数列,而是返回一个 List。
但是如果使用List, 当传进来的参数过大的时候, 会占用许多内存。
我们既想代码简单,又想占用内容小, 就需要使用迭代器了
也就是说将函数中的打印语句 换成 yield 语句, 以迭代器的形式来完成
#假如兔子都不死,问每个月的兔子总数为多少?
#通过数学分析我们知道,兔子的规律为数列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 语句, 以迭代器的形式来完成