La recursividad se divide en dos, CASO BASE y CASO GENERAL.
Para entenderle a esta vaina hay que entenderla como si fuera un ciclo.
Hagan de cuenta que es algo así como un while, ahí se necesita una variable iteradora, en el caso de recursividad el CASO BASE es donde el programa va a decir que pare, y el CASO GENERAL es el codigo que va a ejecutar, o sea ahi es donde se va a llamar la funcion, y se ejecutará las veces que diga el CASO BASE, si no sería un ciclo infinito.
En el ejemplo de la clase:
def factorial(n):
if n == 0: }
}CASO BASE
return 1 }
Aqui es donde le va a decir al programa que pare cuando una condicion se cumpla, todas las recursivas hacen eso o si no serian infinitas.
#############################
else: CASO GENERAL
return n * factorial(n-1)
Aqui el numero (n) va a restarse en cada ciclo, hasta que sea 0, de modo que si es 4. Va a multiplicarse, 4 * 3, porque factorial se llama con el numero 4 pero ahi se esta restando con 1, dando 4-1 =3.
Por lo que la formula queda algo como:
4 * (4-1)
En la siguiente vuelta, será ahora 3 * 2 y a la siguiente vuelta será 2*1, luego 1*0 y ahí para porque llegó a 0 y su caso base nos indica que nos detengamos (return 1).
Entonces n cada ciclo irá restandose 1, porque esa ultima linea le dice que se reste n-1 por ello es que almacena el valor en cada ciclo.
Espero haya ayudado a comprender más este tema que es re complejo para algunos.