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
k
nunca es igual a -1
, de hecho es imposible.