Реализации алгоритмов/Числа Эйлера первого рода: различия между версиями

Материал из Викиучебника — открытых книг для открытого мира
Содержимое удалено Содержимое добавлено
мНет описания правки
мНет описания правки
Строка 1: Строка 1:
== [[w:en:PARI/GP|PARI/GP]] ==
== [[w:en:PARI/GP|PARI/GP]] ==
<source lang="text">
\\ рекуррентная формула
\\ рекуррентная формула
{ E(n, k) =
{ E(n, k) =
if(k<1 || k>n, 0,
if(k<1 || k>n, 0,
Строка 9: Строка 10:
\\ явная формула
\\ явная формула
{ E(n, k) = sum(j=0, k, (-1)^j * (k-j)^n * binomial(n+1,j) ) }
{ E(n, k) = sum(j=0, k, (-1)^j * (k-j)^n * binomial(n+1,j) ) }
</source>


== [[w:Python|Python]] ==
== [[w:Python|Python]] ==
Строка 66: Строка 68:
"""
"""
</source>
</source>

[[Категория:Программирование]]

Версия от 18:02, 7 апреля 2011

PARI/GP

\\ рекуррентная формула
 { E(n, k) =                 
     if(k<1 || k>n, 0, 
       if(n==1, 1, k*E(n-1,k) + (n-k+1)*E(n-1,k-1) );
     )
 }
 
 \\ явная формула
 { E(n, k) = sum(j=0, k, (-1)^j * (k-j)^n * binomial(n+1,j) ) }

Python

from math import factorial

# вспомогательные функции
def binomial(n, k):
    if n >= k:
        return factorial(n) / (factorial(k) * factorial(n-k))
    else:
        return 0

def table(f, n):
    return [[f(i, j) for j in range(n)] for i in range(n)]
    
def format(table):
    return "\n".join([" ".join(["%6s" % col for col in row]) for row in table])

# рекуррентная формула
def euler_rec(n, k):
    if k<1:
        return 0
    elif k>n:
        return 0
    elif n==1:
        return 1
    else:
        return k * euler_rec(n-1, k) + (n-k+1) * euler_rec(n-1, k-1)

# явная формула
def euler_iter(n, k):
    if k<1:
        return 0
    elif k>n:
        return 0
    elif n==1:
        return 1
    else:
        return sum([binomial(n+1, j) * (-1)**j * (k-j)**n for j in range(k)])

# демонстрация работы	
print(format(table(euler_rec, 10)))
print(format(table(euler_iter, 10)))

"""
     0      0      0      0      0      0      0      0      0      0
     0      1      0      0      0      0      0      0      0      0
     0      1      1      0      0      0      0      0      0      0
     0      1      4      1      0      0      0      0      0      0
     0      1     11     11      1      0      0      0      0      0
     0      1     26     66     26      1      0      0      0      0
     0      1     57    302    302     57      1      0      0      0
     0      1    120   1191   2416   1191    120      1      0      0
     0      1    247   4293  15619  15619   4293    247      1      0
     0      1    502  14608  88234 156190  88234  14608    502      1
"""