def mm_cle(d1,d2):
    for c in d1:
        if not (c in d2):
            return False
    for c in d2:
        if not (c in d1):
            return False
    return True

def est_au_dessus(l,M):
    for x in l:
        if x>M:
            return False
    return True

def fibo(n):
    if n<2:
        return 1
    else:
        return fibo(n-1)+fibo(n-2)

def fibo_memo(n, affiche=False):
    L=[1,1]
    for _ in range(n-1):
        L.append(L[-1]+L[-2])
        if affiche:
            print(L)
    return L[n]

def fibo_rec_opt(N):
    K={}
    def aux_rec(n):
        if n<2:
            K[n]=1
        else:
            aux_rec(n-2)
            aux_rec(n-1)
            K[n]=K[n-1]+K[n-2]
    aux_rec(N)
    return K[N]



