Si entiendes muy bien la pila, entenderás cómo funciona la memoria en el programa y si comprendes cómo funciona la memoria en el programa entenderás cómo se almacena la función en el programa y si comprendes cómo se almacena la función en el programa entenderás cómo funciona la función recursiva Funciona y si comprende cómo funciona la función recursiva, entenderá cómo funciona el compilador y si entiende cómo funciona el compilador, su mente funcionará como compilador y depurará cualquier programa muy fácilmente
Déjame explicarte cómo funciona la pila:
Primero tienes que saber cómo se almacena la función en la pila:
Heap almacena los valores de asignación de memoria dinámica.
La pila almacena valores automáticos de asignación y eliminación.

Entendamosconelejemplo:
defhello(x):ifx==1:return"op"
else:
u=1
e=12
s=hello(x-1)
e+=1
print(s)
print(x)
u+=1
return e
hello(4)
Ahora entiendo partes de este programa:

Ahoraveamosquéeslapilayquésonlaspartesdelapila:

Asignacióndelapila:
Recuerdeunacosasicualquierfunciónobtiene"retorno", sin importar que haya cargado todas sus variables locales o cualquier cosa que retorne inmediatamente de la pila, su marco de pila. Significa que cuando una función recursiva obtiene una condición de base y ponemos retorno después de la condición de base para que la condición de base no espere a cargar las variables locales que se encuentran en la parte "else" del programa, devolverá inmediatamente el cuadro actual de la pila y ahora si un cuadro volver el siguiente cuadro está en el registro de activación.
Ver esto en la práctica:

Desasignacióndelbloque:
Entonces,cadavezqueunafunciónencuentreunadeclaraciónderetorno,borraelfotogramaactualdelapila.
mientrasregresadelvalordelapila,regresaráenelordeninversoalordenenqueseasignaronenlapila.

Estassondescripcionesmuycortasysiquieressabermásacercadelapilayladoblerecursión,leelasdospublicacionesdeesteblog:
Más información sobre la pila paso a paso
Más información sobre la doble recursión paso a paso con la pila