import matplotlib.pyplot as plt

# suite u_n(x) et tracés

def Suite(n,x) :
    for k in range(1,n+1) :
        x = x**2/k
    return x
    
N = list(range(15))
plt.axis([0,20,0,10])
for x in [0.5,1,1.5,1.7] :
    Y = []
    for n in N :
        Y.append(Suite(n,x))
    plt.plot(N,Y)
plt.show() 

# recherche du cas limite
for k in range(31) :
    print(Suite(k,1.6616))
    
for k in range(18) :
    print(Suite(k,1.6617))
    
# appriximation de delta : mesure de l'erreur avec ln(n+1) <= n et calcul du reste de la série entière k*x**k (k>=n+1) en dérivant
n = 0
d = 0
while (n+2)/(2**(n+1)) >= 1e-5 :
    d += np.log(n+1)/(2**(n+1))
    n += 1
print(d, np.exp(d))