Grazie!!Adesso finalmente sono riuscito a capire. Ma l'utilizzo di funzioni ricorsive è frequente nella programmazione?
Nei linguaggi funzionali in genere si ma in Python no.
In Python la ricorsione è lenta ed in genere evitata come la peste preferendo l'iterazione al suo posto.

Personalmente, sebbene sappia la teoria che sta alla base, ogni volta che vedo una funzione ricorsiva ci devo spendere un po' di tempo per comprenderla.
Anche se questo può sembrare più ordinato e leggibile:

codice:
def fattoriale(n):
    if n == 0:
        return 1
    return n * fattoriale(n - 1)
...preferisco di gran lunga questo:

codice:
def fattoriale(n):
    result = 1
    factor = 2
    while factor <= n:
        result *= factor
        factor += 1
    return result
...del resto "explicit is better than implicit" (cit. dallo Zen di Python), e per come la vedo io tra le due funzioni la prima non è esplicita quanto la seconda.