Cómo funciona una función recursiva de python para la función tri_recursion

Soy nuevo en Python (progtwigción), encontré que el progtwig recursivo que se muestra a continuación es difícil de seguir. Al depurar el progtwig, pude encontrar que pasa por la recursión y el valor de k disminuye -1 cada vez que repetimos. En un punto k es -1 y el comstackdor se mueve a la parte else y devuelve 0.

Finalmente, el valor k resulta ser 1, ¿cómo sucede esto?

 def tri_recursion(k): if(k>0): result = k+tri_recursion(k-1) print(result) else: result = 0 return result print("\n\nRecursion Example Results") tri_recursion(6) 

Y la salida:

Resultados de Ejemplo de Recursión
1
3
6
10
15
21

Intenta trazar la función con un lápiz y papel. En este caso, la statement de impresión dentro de la función puede ser un poco engañosa.

Considera esta parte del progtwig,

 if(k>0): result = k+tri_recursion(k-1) ... 

De aquí,

 tri_recursion(6) = 6 + tri_recursion(5) 

Entonces, para obtener el resultado de tri_recursion(6) debemos obtener el resultado de tri_recursion(5) Siguiendo esta lógica, el problema se reduce a:

 tri_recursion(6) = 6 + tri_recursion(5) = 6 + 5 + tri_recursion(4) = 6 + 5 + 4 + tri_recursion(3) = 6 + 5 + 4 + 3 + tri_recursion(2) = 6 + 5 + 4 + 3 + 2 + tri_recursion(1) = 6 + 5 + 4 + 3 + 2 + 1 + tri_recursion(0) 

Ahora note que 0 no es mayor que 0, por lo que el progtwig se mueve al cuerpo de la cláusula else:

 else: result = 0 ... 

Lo que significa tri_recursion(0) = 0 . Por lo tanto:

 tri_recursion(6) = 6 + 5 + 4 + 3 + 2 + 1 + tri_recursion(0) = 6 + 5 + 4 + 3 + 2 + 1 + 0 = 21 

Puntos a tener en cuenta

  1. En la ejecución de este progtwig. k nunca es igual a -1 , de hecho es imposible.
  2. Es engañoso pensar en el flujo de control en términos de “el comstackdor moviéndose a través de un progtwig”. El comstackdor no hace nada durante la ejecución ( JIT es un asunto diferente). Es mejor pensar en términos de flujo de control / orden de ejecución en lenguajes de procedimiento, en términos de progtwigción funcional y relaciones en progtwigción lógica.