fib_array

# import sys if len(sys.argv) != 2:
#     print('need argument')
#     sys.exit()
    
# n = int(sys.argv[1])

n = 8

fib_array = [1, 1]
for i in range(2, n):
    fib_array.append(fib_array[i - 1] + fib_array[i - 2])
    
print(fib_array)

output:
[1, 1, 2, 3, 5, 8, 13, 21]

recursive_fib

recursive_array = {}
def recursive_fib(n):
    if n < 2:
        return n
    
    result = recursive_fib(n - 1) + recursive_fib(n - 2)
    recursive_array[n] = result
    return result

print(recursive_fib(8))
print([v for k, v in recursive_array.items()])

output:
21
[1, 2, 3, 5, 8, 13, 21]

memoize_fib

cache = {}
def memoize_fib(n):
    if n < 2:
        return n
    
    if n in cache:
        return cache[n]
    
    result = memoize_fib(n - 1) + memoize_fib(n - 2)
    cache[n] = result
    return result

print(memoize_fib(8))
print([v for k, v in cache.items()])

output:
21
[1, 2, 3, 5, 8, 13, 21]

fibgen

def fibgen(n):
    fib0 = 1
    yield fib0
    fib1 = 1
    yield fib1
    for i in range(n-2):
        fib0, fib1 = fib1, fib0 + fib1
        yield fib1
    
print([f for f in fibgen(8)][-1])
print([f for f in fibgen(8)])

output
21
[1, 1, 2, 3, 5, 8, 13, 21]