# fact: solució recursiva lineal

def fact(n):
    assert n >= 0
    if n == 0:          # cas base
        f = 1           #   resultat trivial de calcular
    else:               # cas recursiu
        f1 = fact(n-1)  #   crida recursiva sobre dades mes petites
        f = n * f1      #   combinacio del resultat de la crida recursiva
                        #     amb les dades originals per calcular el resultat
    return f
