python的generator用法

def fib(n):
    if n == 0 or n == 1:
        return n
    else:
        return fib(n-1) + fib(n-2)
for i in range(36):
    print "n=%d => %d" % (i, fib(i))
使用上面的算法,执行fib(36)在我机器上要40多s
使用generator形式算法,执行速度暴快,不到1s
def fib(n):
    a,b=0,1
    i=0
    while(i  n):
        yield(i,b)
        a,b=b,a+b
        i = i+1
for i, f in fib(36):
    print "n=%d => %d" % (i, f)