# 1) Suites

def arithmetique(n):
    if n == 0:
        return 2
    else:
        return arithmetique(n-1) + 5
        
def geometrique(n):
    if n == 0:
        return 1/3
    else:
        geometrique(n-1)*6


def arithmetico_geometrique(n):
    if n == 0:
        return 4/3
    else:
        return 3 * arithmetico_geometrique(n-1) + 2

# 2) Suite de Syracuse

def Syracuse(n):
    print(n)
    if n == 1:
        pass
    elif n%2 == 0:
        Syracuse(n//2)
    else:
        Syracuse(3*n+1)

Syracuse(15)


# 3) Exponentiation rapide

def exp(x, n):
    if n == 1:
        return x
    elif n%2 == 0:
        return exp(x*x, n//2)
    else:
        return x * exp(x*x, (n-1)//2 )

assert exp(2, 8) == 256 and exp(2, 7) == 128 

# 4) Génération de liste

def gen_liste(n):
    if n == 0:
        return [0]
    else:
        return [n] + gen_liste(n-1)
        
assert gen_liste(6) == [6, 5, 4, 3, 2, 1, 0]
