MMmh io personalmente trovo strana questa tua difficoltà: il caso base si individua subito e il passo induttivo altrettanto.
E' vero che in Erlang forse si vede un po' meglio
codice:
fac(0)- > 1;
fac(X) -> X * fac(X-1).
ma considerando che in Common Lisp ottieni
codice:
(defun fac(x)
(if (= x 0)
1
(* x (fac (- x 1)))
(anche se devo ammettere che si vede bene anche qui, questione di parentesi)
vedrai che in Python non è poi così male
codice:
def fattoriale(n):
if n == 0: # caso base
return 1
return n * fattoriale(n - 1) # passo induttivo