36 lines
780 B
Python
36 lines
780 B
Python
from functools import cache
|
|
|
|
def make_generator(f):
|
|
n = 1
|
|
while True:
|
|
yield f(n)
|
|
n += 1
|
|
|
|
|
|
def make_generator_mem(f):
|
|
@cache
|
|
def cached_f(n):
|
|
return f(n)
|
|
return make_generator(f)
|
|
|
|
def fibonacci(n):
|
|
if n <= 1:
|
|
return n
|
|
return fibonacci(n-1) + fibonacci(n-2)
|
|
|
|
if __name__ == "__main__":
|
|
print("fibonacci 10 next terms")
|
|
fib_generator = make_generator_mem(fibonacci)
|
|
for x in range(10):
|
|
print(next(fib_generator))
|
|
|
|
print("square generator")
|
|
square_generator = make_generator_mem(lambda x : x**2)
|
|
for x in range(10):
|
|
print(next(square_generator))
|
|
|
|
print("ones generator")
|
|
one_generator = make_generator_mem(lambda x : 1)
|
|
for x in range(10):
|
|
print(next(one_generator))
|