欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

斐波那契数列(生成器用的少,面试处理大数据时使用)

程序员文章站 2022-05-09 13:50:43
...
  1. 一般用for来迭代生成器,当list来处理,不是直接生成一个列表(数据过大),我们保存的是算法,通过算法一个个推导
f=(i**2 for i in range(1,10))
  1. 函数实现生成器(yield语句),推导算法复杂,用列表生成式for循环无法实现,将return变成yeild
def func():
    print('aaaa')
    print("bbbbb")
    print('ccccc')
    yield 5
    print('zzzzz')
    yield 6
f=func()#生成器,生成的东西当作list理解

next(f)
next(f)
next(f)
# for i in f:
#     print(i)

访问:生成器,生成的东西当作list理解
1.生成器可以通过next(f)来实现访问,每次next到yield停止,下次从yield后继续
2.while 1:
next(f)一直访问但是最后会报错StopIteration
3. for i in f:
print(i)

斐波那契数列
法1:函数的形式

def fib(count):
    index=0
    x,y=0,1

    while index < count:
        print(y)
        x,y=y,x+y
        index+=1
fib(9999)

法2:生成器形式

def fib(count):
    index=0
    x,y=0,1

    while index < count:
        yield y
        x,y=y,x+y
        index+=1
    return 'sunck is a good man'

g=fib(9)##生成器
# for i in g:##for 有个缺点就是执行到yield就停止了,拿不到generator的返回值,如果想拿要捕获StopIteration
#     print(i)

#用while
while 1:
    try:
        ret=next(g)
        print(ret)
    except StopIteration as e:
        print("返回值:",e.value)
        break

法3 递归50次就卡死了

import sys#递归50次就卡死了
sys.setrecursionlimit(1000000)  # 例如这里设置为一百万
def f(n):
    if n==1 or n==2:
       return 1
    else:
        return f(n-1)+f(n-2)
n=int(input())
a=f(n)
print(a%10007)
相关标签: python日常小记录