斐波那契数列(生成器用的少,面试处理大数据时使用)
程序员文章站
2022-05-09 13:50:43
...
- 一般用for来迭代生成器,当list来处理,不是直接生成一个列表(数据过大),我们保存的是算法,通过算法一个个推导
f=(i**2 for i in range(1,10))
- 函数实现生成器(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)
上一篇: YApi的使用,导入使用
下一篇: IKanalyzer中文分词器