def fibonacci_generator(): """ Fibonacci generator function that starts with 1, 1, 2, 3, ... :returns: generator that yields fibonacci numbers """ a = 0 b = 1 yield b while True: a, b = b, (a + b) yield b def fibonacci_generator_smaller(n): """ :param n: generator yields all fibonacci numbers smaller n :returns: generator that yields fibonacci numbers """ g = fibonacci_generator() x = next(g) while x < n: yield x x = next(g) def fibonacci_nth(n): """ :param n: index of fibonacci that should be returned :returns: nth fibonacci number """ if n < 1: return 0 g = fibonacci_generator() i = 1 x = next(g) while i < n: i += 1 x = next(g) return x