Fattoriale – Funzioni

Puoi usare la funzione math.factorial()


Definizione iterativa

\displaystyle n!=\left\{ \begin{array}{ll}1 & n=0,1\\ n(n-1)\,\dots\,1 & \text{altrimenti}\end{array} \right

Per n=5: 5!=5*4*3*2*1=120

Il fattoriale come funzione di n

def fatt(n):  
    prod = 1
    for i in range(2, n+1):
        prod *= i
    return prod

n = 5
print(n, fatt(n))  # 5 120
def fatt(n):     
    prod = 1
    i = 2
    while(i <= n):
        prod *= i
        i    += 1
    return prod

n = 5
print(n, fatt(n))  # 5 120

Definizione ricorsiva

\displaystyle n!=\left\{ \begin{array}{ll}1 & n=0,1\\ n(n-1)! & \text{altrimenti}\end{array} \right

oppure

\displaystyle f(n)=\left\{\begin{array}{ll}1 & n=0,1\\ n\cdot f(n-1) & \text{altrimenti}\end{array} \right

def fatt(n):  
    if(n <= 1): 
        return 1
    else:
        return n*fatt(n-1)

n = 5
print(n, fatt(n))  # 5 120

Coefficiente binomiale

La funzione fattoriale si utilizza per il calcolo del coefficiente binomiale di n su k…

def coefficente_binomiale(n, k):
    f_n   = fatt(n)
    f_k   = fatt(k)
    f_n_k = fatt(n-k)
    return f_n // (f_k * f_n_k)

Sinteticamente

def coefficente_binomiale(n, k):
    return fatt(n) // (fatt(k) * fatt(n-k))

Con la formula più corta

def prodotto(a, b):
    prod = 1
    for i in range(a, b+1):
        prod *= i
    return prod

def coefficente_binomiale(n, k):
    return prodotto(n, n-k+1) // fatt(k)