import numpy as np
import matplotlib.pyplot as plt

def f(x) :
    return 1/(2-np.exp(x))

def fact(n) :
    r = 1
    for k in range(1,n+1) :
        r *= k
    return r
    
def a(n) :
    if n == 0 :
        return 1
    else :
        s = 0
        for k in range(1,n+1) :
            s += a(n-k)/fact(k)
        return s

print([a(n) for n in range(10)])

# N = list(range(10))
# A = [a(n) for n in N]
# Y1 = [1/(np.log(2)**n) for n in N]
# Y2 = [1/(2*np.log(2)**n) for n in N]
# plt.plot(N,A,color='k')
# plt.plot(N,Y1,color='r')
# plt.plot(N,Y2,color='b')
# plt.show()

def S(n,x) :
    s = 0
    for k in range(n+1) :
        s += a(k)*x**k
    return s
    
# X = np.linspace(-0.6,0.6,100)
# for n in range(6) :
#     Y = []
#     for x in X :
#         Y.append(S(n,x))
#     plt.plot(X,Y)
# Z = [f(x) for x in X]
# plt.plot(X,Z)
# plt.show()