def fib1(n):
a, b = 0, 1 while n >0: n -= 1 a, b = b ,a + b if b > 30: break else: yield b def fib2(): a, b = 0, 1 fibs = [] for i in range(10): a, b = b, a+b fibs.append(b) return fibs def fib3(n): if n == 0 : return 0 elif n == 1: return 1 else: return fib3(n-1) + fib3(n-2) import itertools def fib4(): a, b = 0, 1 while 1: yield b a, b = b, a+b reference https://foofish.net/iterators-vs-generators.html