import matplotlib.pyplot as plt
import scipy.integrate as integr
import numpy as np

# Premier termes de a_n

def a(n) :
    if n == 1 :
        return 1
    else :
        s = 0
        for k in range(1,n) :
            s += a(k)*a(n-k)
        return s
        
for k in range(1,11) :
    print(a(k))
    
# Suite (S_n) : elle converge
        
def S(n) :
    s = 0
    for k in range(1,n+1) :
        s += a(k)/4**k
    return s

X = list(range(1,11))
Y = []
for x in X :
    Y.append(S(x))
# plt.plot(X,Y,'o')

# suite (b_n)

def b(n) :
    if n == 1 :
        return 1
    else :
        s = 0
        for k in range(1,n) :
            s += b(k)*b(n-k)
        return -n*s/(2*(n-1))
        
# Tracé de B*exp(B)
        
L = [b(k) for k in range(1,11)]

def B(x) :
    s = 0
    for k in range(len(L)) :
        s += L[k]*x**(k+1)
    return s


X = np.linspace(-1/4,1/4,50)
Z = []
for x in X :
    Z.append(B(x)*np.exp(B(x)))

plt.plot(X,Z)
plt.show()
