# Exercice 2 Modify

# 1) Modifier la fonction myst1 de l’exercice précédent pour écrire la fonction somme(n) qui calcule la
# somme des entiers de 1 à n.
# assert somme(10) == 55

def somme(n):
    if n == 0:
        return 0
    else:
        return somme(n-1) + n

assert somme(10) == 55

# 2) Modifier la fonction myst1 de l’exercice précédent pour écrire la fonction produit(a, b) qui calcule le
# produit de a par b.
# assert produit(123, 456) == 123*456
# assert produit(-123, 456) == -123*456

def produit(a, b):
    if a == 0:
        return 0
    elif a < 0:
        return produit(a+1, b) - b
    else:
        return produit(a-1, b) + b

assert produit(123, 456) == 123*456
assert produit(-123, 456) == -123*456

# 3) Modifier la fonction myst2 de l’exercice précédent pour écrire la fonction puissance(n, exp) qui
# calcule n à la puissance exp.
# assert puissance(123, 4) == 123**4
# assert puissance(-2, -4) == 0.0625

def puissance(n, exp):
    if n == 0 and exp == 0:
        pass # indéfini mathématiquement
    if n == 0:
        return 0
    if exp == 0:
        return 1
    elif exp < 0:
        return puissance(n, exp + 1) / n
    else:
        return puissance(n, exp - 1) * n

assert puissance(123, 4) == 123**4
assert puissance(-2, -4) == 0.0625
