firstTerm = temp
        #
    return secondTerm


def Fibonacci_recursive(number):
    cache = {}

    def fib(number):
        # base case fpr 1 & 0
        if number in [0, 1]: return number
        # recursive case
        if not number in cache:
            cache[number] = fib(number - 1) + fib(number - 2)
        return cache[number]

    return fib(number)


intList = TestHelper.GenerateRandomIntListWithoutDuplicates(5, 1, 60)

for i in intList:
    t1 = datetime.now()
    r = Fibonacci_iterative(i)
    t2 = datetime.now()
    print(i, "Fibonacci_iterative", r, t2 - t1)
    t1 = datetime.now()
    r = Fibonacci_recursive(i)
    t2 = datetime.now()
    print(i, "Fibonacci_recursive", r, t2 - t1)

def IntersectionCountHash(arr1, arr2):
    count = 0
    d1 = {}
    for i in arr1:
        d1[i] = 1

    for j in arr2:
        if j in d1:
            count += 1

    return count


a1 = TestHelper.GenerateRandomIntListWithoutDuplicates(50000, 0, 1000000)
a2 = TestHelper.GenerateRandomIntListWithoutDuplicates(40000, 0, 1000000)

print("solution 1")
t1 = datetime.now()

count = IntersectionCount(a1, a2)

t2 = datetime.now()

print("IntersectionCount", count, "Time diff", t2 - t1)

print("solution 2")
t1 = datetime.now()

count = IntersectionCountSorted(a1, a2)