#! /usr/bin/env python3

# yield in Funktion erzeugt automatisch Iterator(-Generator)
# yield gibt innerhalb einer Iteration einen Wert zurueck
#    und haelt die Funktion an, damit dort bei der naechsten
#    Iteration weiter gearbeitet werden kann
def fibonacci_folge(n):
    if n >= 1:
        #print("yield 1 (fib(1))")
        yield 1
    if n >= 2:
        #print("yield 1 (fib(2))")
        yield 1

    fn_1, fn_2 = 1, 1
    for i in range(n-2):
        fn_1, fn_2 = fn_1 + fn_2, fn_1
        #print("yield {} (fib({}))".format(fn_1, i+3))
        yield fn_1


#for n in range(1,31):
#    print(fibonacci(n))

for fib in fibonacci_folge(30):
    print(fib)

# Keine konkreten Werte mehr, sondern Generator-Objekt
# print(fibonacci_folge(30))
# print(list(fibonacci_folge(30)))
# print([i for i in fibonacci_folge(30)])
