-
Lo que quiero hacer en este video es aclarar
-
la diferencia entre
-
una definición de función irativa, o debería decir iterativa,
-
siempre lo pronuncio mal,
-
definición de función iterativa,
-
y una definición de función recursiva.
-
Lo haremos realmente por...como que entendamos
donde está sucediendo la iteración aquí
-
y donde está sucendiendo la recursión aquí
a la derecha.
-
Entonces cuando comenzamos vemos que 'product'
lo hacemos igual a 1
-
y entonces entramos nuestro ciclo 'for' y el ciclo
'for' es realmente el meollo de la definición de
la función iterativa.
-
Y entiendiendo lo que está pasando en el ciclo
'for'. Hagamos, hagamos una tablita aqui.
-
Así que voy a hacer una tabla para el valor
de nuestra variable i y también voy a descifrar el
-
valor de 'product' multiplicado por i + 1,
-
porque en cada iteración en este ciclo 'for' vamos a
evaluar este asunto justo aquí
-
y luego voy a hacer una columna para el nuevo valor
de nuestro 'product', el nuevo valor de nuestro 'product'.
-
Subrayemos estas cosas y luego tenemos
el nuevo valor de nuestro 'product'.
-
Así que aprendimos en muchos videos anteriores
que en Python decimos 'for i in range'.
-
Este 'range' de aquí,...
-
Este 'range' de aquí regresa una lista y regresa
una lista del número de elementos,
-
como el número que hemos pasado...
Lo pasamos aqui.
-
Si asumimos y debería de haber dicho desde
el principio.
-
Asumamos que estamos llamando sólo para
hacer algo específico.
-
Digamos, este es el resultado de llamar el factorial de 3.
-
Entonces el argumento que pasamos a este factorial
es 3. La variable 'number' se referirá a 3.
-
Cuando llamas 'range' de 'number', literalmente
regresará una lista: 0, 1, 2.
-
Entonces 3 elementos comenzando con 0, el
último elemento es 3 - 1. Es 2.
-
Y entonces cada ciclo a través de este ciclo 'for'
se le va a asignar i a cada elemento sucesivo
-
en la lista.
-
Entonces la primera vez a través de este ciclo 'for'
se le va a asignar a i un 0.
-
Nuestro i se va a referir al 0.
-
Y entonces 'product' por i - 1, bueno en
este primer ciclo, 'product' apareció antes de que
-
si quiera entrara en el ciclo, 'product' se
definió como 1.
-
Entonces 'product' va a ser 1 y esto es 1
por --No quiero hacerlo en ese color, sólo lo haré
-
en magenta...Lo haré en magenta--1 por
i, que es 0. 1 por 0 + 1.
-
Más 1 y esto...y entonces nuestro nuevo valor de
'product' es esencialmente esto evaluado.
-
Lo tenemos bien aquí.
-
'Product' es igual a todo este asunto.
-
Nuestro nuevo valor es 1 por 0 más 1
y eso es exactamente 1 * 1 y eso va a ser 1.
-
Eso es todo lo que teníamos dentro del ciclo 'for',
-
porque esa fue la única cosa que intentábamos
dentro del ciclo 'for'
-
y entonces vamos a regresar y vamos a
iterar a través de la siguiente iteración de
nuestro ciclo.
-
Me supongo que podrías decir 'Y ahora i va a
tener un 1 asignado.'
-
Entonces ahora i va a ser 1.
-
Esta expresión de aquí, vamos a tomar nuestro
'product' anterior.
-
Entonces 'product' es aún 1. Por lo tanto 'product'
es 1 y va a ser multiplicado por i, que ahora es 1 + 1.
-
Y a qué va a ser igual esto?
-
Bueno si evalúas todo esto, obtienes 1 * 2.
Entonces ahore el nuevo valor de 'product' es 2.
-
Después de nuestra segunda iteración a través
de nuestro ciclo, nuestra segunda pasada a
través del ciclo.
-
Ahora regresaremos al comienzo del ciclo
y a i se le asignará el siguiente elemento
-
de la lista. Se le asignará ahora un 2.
-
Ahora i es 2. Esta cosa de aquí, vamos a tomar...
-
Esto va a ser 'product'. 'Product' ahora es 2.
-
Entonces va a ser 2 por i, bueno i es ahora 2 + 1
y entonces qué es esto? Es 2 por 3 o sea 6.
-
O 6 y entonces se va y diremos OK, podemos
asignar i a algún elemento adicional en esto?
-
No, se nos han acabado los elementos. Salimos
del ciclo 'for' y regresamos el producto.
-
O la variable 'product', a lo que se esta refireindo y
eso es lo que debería decir.
-
Deberíamos regresar el valor al que 'product'
se está refiriendo y ese valor es 6.
-
Entonces cuando llamas 'factorial 3', regresará 6.
-
Entonces si fueras a decir 'factorial', si dices factorial de
3 más factorial de 3
-
y si fueras a evaluar esta expresión, esta expresión
evaluaría en 6.
-
Y esta expresión de aquí evaluaría en 6
porque eso es lo que la función regresaría.
-
Y entonces si añades esos, evaluaría en 12.
-
Así que esto es por lo que lo llamamos iterativo.
-
Seguimos iterando a través del mismo conjunto
de instrucciones y ahora comparemos la
definición recursiva.
-
Y ésta es un poco más divertida en muchas formas.
-
Una vez de nuevo vamos a llamar factorial de 3.
-
Factorial de 3.
-
Entonces 3 es nuestro argumento. Ese es el valor al
que ese número hará referencia y lo tomará.
-
Y dice, si 'number' es menor que o igual a 1.
-
Bueno 3 no es menor que o igual a 1.
-
Entonces no vamos a hacer esta parte de aquí.
-
Vamos a hacer la cláusula 'else'.
-
Entonces vamos a regresar 'number'. Vamos a
regresar 'number' por factorial de todo esto.
-
Entonces esto va a evaluar en 'number' que es 3.
Ese es el argumento que pasamos.
-
Multiplicado por factorial de 'number' menos 1.
-
Bueno 'number' - 1 va a evaluar en 2. Tres menos 1 es 2.
-
Entonces por factorial de 2.
-
Bueno eso es otra función llamada 'factorial'
entonces regresamos.
-
Bueno, factorial, pero ahora el argumento es 2.
Entonces el 'number' es 2.
-
Vamos aquí. Si 'number' es menor que o igual a 1,
hacemos esto.
-
Pero 'number' no es menor que o igual a 1. Es 2.
Entonces ahora hacemos 'else'.
-
Entonces lo que ahora queremos regresar es
'number' por factorial 'number' menos 1.
-
Bueno, en esta situación...
-
En esta situación, 'number' es ahora 2 y vamos
a querer multiplicar esas veces el factorial...
-
por el factorial de 2 - 1.
-
Bueno 2 - 1 es 1.
-
Por el factorial de 1.
-
Bueno, exactamente hemos hecho otra llamada
a la función. Entonces el interpretador como que
tiene que recordar que hicimos toda esta
-
serie de llamadas a la función y tiene que
seguir excavando más profundo y más
profundo y más profundo.
-
Ahora hemos llamado factorial de 1.
-
Factorial de 1. Cuál es el argumento? 'Number' se
refiere a 1.
-
Si 'number' es menos que o igual a 1,
-
'number' es menor que o igual a 1.
-
Ahora esto es lo que llamamos un caso base.
Como que estamos bajando hacia él.
-
Entonces 'number' es menor que o igual a 1. Regresa 1.
-
Entonces en esta situación, cuando llamamos
factorial 1, literalmente regresa 1.
-
Y ahora sabemos que factorial de 2 evalúa en
2 por 1.
-
Entonces esto evalúa en 2 y ahora sabemos que
factorial de 3 evalúa en 3 por 2, lo que evaluará en 6.
-
Así que hay diferentes formas de pensar en esto,
pero que dan exactamente el mismo resultado.
-
Una vez de nuevo, si tienes factorial de 3 +
factorial de 3, no importa como lo implementamos,
-
obtendremos 6 + 6 o 12.