Orders of Growth: Difficult

Finding Orders of Growth

def f1(n):
    if n == 0:
        return 0
    while n > 0:
        print(n)
        n -= 1
    return f1(n // 2)

def f2(n):
    if n == 0:
        return 0
    while n > 0:
        print(n)
    return f2(n // 2) + f2(n // 2)

def f3(n):
    for x in range(n):
        if x % n == 0:
            return f3(n - 1)

def f4(n, m):
    if n == 0:
        return 0
    for x in range(m):
        f4(n - 1, m // 2)
    return 1