[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:00.67,0:00:02.73,Default,,0000,0000,0000,,Lo que quiero hacer en este video es aclarar Dialogue: 0,0:00:02.73,0:00:04.20,Default,,0000,0000,0000,,la diferencia entre Dialogue: 0,0:00:04.20,0:00:07.20,Default,,0000,0000,0000,,una definición de función irativa, o debería decir iterativa, Dialogue: 0,0:00:07.20,0:00:08.40,Default,,0000,0000,0000,,siempre lo pronuncio mal, Dialogue: 0,0:00:08.40,0:00:10.80,Default,,0000,0000,0000,,definición de función iterativa, Dialogue: 0,0:00:10.80,0:00:15.67,Default,,0000,0000,0000,,y una definición de función recursiva. Dialogue: 0,0:00:15.67,0:00:21.27,Default,,0000,0000,0000,,Lo haremos realmente por...como que entendamos \Ndonde está sucediendo la iteración aquí Dialogue: 0,0:00:21.27,0:00:24.13,Default,,0000,0000,0000,,y donde está sucendiendo la recursión aquí\Na la derecha. Dialogue: 0,0:00:24.13,0:00:28.33,Default,,0000,0000,0000,,Entonces cuando comenzamos vemos que 'product'\Nlo hacemos igual a 1 Dialogue: 0,0:00:28.33,0:00:36.53,Default,,0000,0000,0000,,y entonces entramos nuestro ciclo 'for' y el ciclo\N'for' es realmente el meollo de la definición de\Nla función iterativa. Dialogue: 0,0:00:36.53,0:00:40.33,Default,,0000,0000,0000,,Y entiendiendo lo que está pasando en el ciclo\N'for'. Hagamos, hagamos una tablita aqui. Dialogue: 0,0:00:40.33,0:00:49.64,Default,,0000,0000,0000,,Así que voy a hacer una tabla para el valor\Nde nuestra variable i y también voy a descifrar el Dialogue: 0,0:00:49.64,0:00:54.20,Default,,0000,0000,0000,,valor de 'product' multiplicado por i + 1, Dialogue: 0,0:00:54.20,0:00:59.40,Default,,0000,0000,0000,,porque en cada iteración en este ciclo 'for' vamos a\Nevaluar este asunto justo aquí Dialogue: 0,0:00:59.40,0:01:07.13,Default,,0000,0000,0000,,y luego voy a hacer una columna para el nuevo valor \Nde nuestro 'product', el nuevo valor de nuestro 'product'. Dialogue: 0,0:01:07.13,0:01:11.80,Default,,0000,0000,0000,,Subrayemos estas cosas y luego tenemos\Nel nuevo valor de nuestro 'product'. Dialogue: 0,0:01:11.80,0:01:17.73,Default,,0000,0000,0000,,Así que aprendimos en muchos videos anteriores\Nque en Python decimos 'for i in range'. Dialogue: 0,0:01:17.73,0:01:20.07,Default,,0000,0000,0000,,Este 'range' de aquí,... Dialogue: 0,0:01:20.07,0:01:26.40,Default,,0000,0000,0000,,Este 'range' de aquí regresa una lista y regresa\Nuna lista del número de elementos, Dialogue: 0,0:01:26.40,0:01:29.73,Default,,0000,0000,0000,,como el número que hemos pasado...\NLo pasamos aqui. Dialogue: 0,0:01:29.73,0:01:32.33,Default,,0000,0000,0000,,Si asumimos y debería de haber dicho desde\Nel principio. Dialogue: 0,0:01:32.33,0:01:35.80,Default,,0000,0000,0000,,Asumamos que estamos llamando sólo para\Nhacer algo específico. Dialogue: 0,0:01:35.80,0:01:45.33,Default,,0000,0000,0000,,Digamos, este es el resultado de llamar el factorial de 3. Dialogue: 0,0:01:45.33,0:01:51.93,Default,,0000,0000,0000,,Entonces el argumento que pasamos a este factorial\Nes 3. La variable 'number' se referirá a 3. Dialogue: 0,0:01:51.93,0:01:58.80,Default,,0000,0000,0000,,Cuando llamas 'range' de 'number', literalmente\Nregresará una lista: 0, 1, 2. Dialogue: 0,0:01:58.80,0:02:03.73,Default,,0000,0000,0000,,Entonces 3 elementos comenzando con 0, el\Núltimo elemento es 3 - 1. Es 2. Dialogue: 0,0:02:03.73,0:02:09.60,Default,,0000,0000,0000,,Y entonces cada ciclo a través de este ciclo 'for' \Nse le va a asignar i a cada elemento sucesivo Dialogue: 0,0:02:09.60,0:02:10.67,Default,,0000,0000,0000,,en la lista. Dialogue: 0,0:02:10.67,0:02:14.93,Default,,0000,0000,0000,,Entonces la primera vez a través de este ciclo 'for'\Nse le va a asignar a i un 0. Dialogue: 0,0:02:14.93,0:02:18.13,Default,,0000,0000,0000,,Nuestro i se va a referir al 0. Dialogue: 0,0:02:18.13,0:02:25.80,Default,,0000,0000,0000,,Y entonces 'product' por i - 1, bueno en\Neste primer ciclo, 'product' apareció antes de que Dialogue: 0,0:02:25.80,0:02:28.40,Default,,0000,0000,0000,,si quiera entrara en el ciclo, 'product' se\Ndefinió como 1. Dialogue: 0,0:02:28.40,0:02:36.67,Default,,0000,0000,0000,,Entonces 'product' va a ser 1 y esto es 1 \Npor --No quiero hacerlo en ese color, sólo lo haré Dialogue: 0,0:02:36.67,0:02:47.67,Default,,0000,0000,0000,,en magenta...Lo haré en magenta--1 por\Ni, que es 0. 1 por 0 + 1. Dialogue: 0,0:02:47.67,0:02:53.53,Default,,0000,0000,0000,,Más 1 y esto...y entonces nuestro nuevo valor de\N'product' es esencialmente esto evaluado. Dialogue: 0,0:02:53.53,0:02:54.67,Default,,0000,0000,0000,,Lo tenemos bien aquí. Dialogue: 0,0:02:54.67,0:02:56.67,Default,,0000,0000,0000,,'Product' es igual a todo este asunto. Dialogue: 0,0:02:56.67,0:03:01.93,Default,,0000,0000,0000,,Nuestro nuevo valor es 1 por 0 más 1\Ny eso es exactamente 1 * 1 y eso va a ser 1. Dialogue: 0,0:03:01.93,0:03:05.47,Default,,0000,0000,0000,,Eso es todo lo que teníamos dentro del ciclo 'for', Dialogue: 0,0:03:05.47,0:03:08.53,Default,,0000,0000,0000,,porque esa fue la única cosa que intentábamos\Ndentro del ciclo 'for' Dialogue: 0,0:03:08.53,0:03:16.47,Default,,0000,0000,0000,,y entonces vamos a regresar y vamos a\Niterar a través de la siguiente iteración de\Nnuestro ciclo. Dialogue: 0,0:03:16.47,0:03:19.67,Default,,0000,0000,0000,,Me supongo que podrías decir 'Y ahora i va a \Ntener un 1 asignado.' Dialogue: 0,0:03:19.67,0:03:22.67,Default,,0000,0000,0000,,Entonces ahora i va a ser 1. Dialogue: 0,0:03:22.67,0:03:25.80,Default,,0000,0000,0000,,Esta expresión de aquí, vamos a tomar nuestro\N'product' anterior. Dialogue: 0,0:03:25.80,0:03:40.33,Default,,0000,0000,0000,,Entonces 'product' es aún 1. Por lo tanto 'product'\Nes 1 y va a ser multiplicado por i, que ahora es 1 + 1. Dialogue: 0,0:03:40.33,0:03:42.27,Default,,0000,0000,0000,,Y a qué va a ser igual esto? Dialogue: 0,0:03:42.27,0:03:48.33,Default,,0000,0000,0000,,Bueno si evalúas todo esto, obtienes 1 * 2.\NEntonces ahore el nuevo valor de 'product' es 2. Dialogue: 0,0:03:48.33,0:03:52.87,Default,,0000,0000,0000,,Después de nuestra segunda iteración a través\Nde nuestro ciclo, nuestra segunda pasada a\Ntravés del ciclo. Dialogue: 0,0:03:52.87,0:04:00.27,Default,,0000,0000,0000,,Ahora regresaremos al comienzo del ciclo\Ny a i se le asignará el siguiente elemento Dialogue: 0,0:04:00.27,0:04:02.60,Default,,0000,0000,0000,,de la lista. Se le asignará ahora un 2. Dialogue: 0,0:04:02.60,0:04:06.33,Default,,0000,0000,0000,,Ahora i es 2. Esta cosa de aquí, vamos a tomar... Dialogue: 0,0:04:06.33,0:04:08.93,Default,,0000,0000,0000,,Esto va a ser 'product'. 'Product' ahora es 2. Dialogue: 0,0:04:08.93,0:04:23.60,Default,,0000,0000,0000,,Entonces va a ser 2 por i, bueno i es ahora 2 + 1\Ny entonces qué es esto? Es 2 por 3 o sea 6. Dialogue: 0,0:04:23.60,0:04:30.09,Default,,0000,0000,0000,,O 6 y entonces se va y diremos OK, podemos\Nasignar i a algún elemento adicional en esto? Dialogue: 0,0:04:30.09,0:04:36.78,Default,,0000,0000,0000,,No, se nos han acabado los elementos. Salimos\Ndel ciclo 'for' y regresamos el producto. Dialogue: 0,0:04:36.78,0:04:41.80,Default,,0000,0000,0000,,O la variable 'product', a lo que se esta refireindo y\Neso es lo que debería decir. Dialogue: 0,0:04:41.80,0:04:46.60,Default,,0000,0000,0000,,Deberíamos regresar el valor al que 'product'\Nse está refiriendo y ese valor es 6. Dialogue: 0,0:04:46.60,0:04:50.07,Default,,0000,0000,0000,,Entonces cuando llamas 'factorial 3', regresará 6. Dialogue: 0,0:04:50.07,0:04:59.82,Default,,0000,0000,0000,,Entonces si fueras a decir 'factorial', si dices factorial de\N3 más factorial de 3 Dialogue: 0,0:04:59.82,0:05:05.60,Default,,0000,0000,0000,,y si fueras a evaluar esta expresión, esta expresión\Nevaluaría en 6. Dialogue: 0,0:05:05.60,0:05:10.10,Default,,0000,0000,0000,,Y esta expresión de aquí evaluaría en 6\Nporque eso es lo que la función regresaría. Dialogue: 0,0:05:10.10,0:05:13.87,Default,,0000,0000,0000,,Y entonces si añades esos, evaluaría en 12. Dialogue: 0,0:05:13.87,0:05:16.07,Default,,0000,0000,0000,,Así que esto es por lo que lo llamamos iterativo. Dialogue: 0,0:05:16.07,0:05:22.47,Default,,0000,0000,0000,,Seguimos iterando a través del mismo conjunto\Nde instrucciones y ahora comparemos la\Ndefinición recursiva. Dialogue: 0,0:05:22.47,0:05:24.87,Default,,0000,0000,0000,,Y ésta es un poco más divertida en muchas formas. Dialogue: 0,0:05:24.87,0:05:27.80,Default,,0000,0000,0000,,Una vez de nuevo vamos a llamar factorial de 3. Dialogue: 0,0:05:27.80,0:05:30.60,Default,,0000,0000,0000,,Factorial de 3. Dialogue: 0,0:05:30.60,0:05:34.60,Default,,0000,0000,0000,,Entonces 3 es nuestro argumento. Ese es el valor al\Nque ese número hará referencia y lo tomará. Dialogue: 0,0:05:34.60,0:05:36.93,Default,,0000,0000,0000,,Y dice, si 'number' es menor que o igual a 1. Dialogue: 0,0:05:36.93,0:05:38.80,Default,,0000,0000,0000,,Bueno 3 no es menor que o igual a 1. Dialogue: 0,0:05:38.80,0:05:40.67,Default,,0000,0000,0000,,Entonces no vamos a hacer esta parte de aquí. Dialogue: 0,0:05:40.67,0:05:41.87,Default,,0000,0000,0000,,Vamos a hacer la cláusula 'else'. Dialogue: 0,0:05:41.87,0:05:48.93,Default,,0000,0000,0000,,Entonces vamos a regresar 'number'. Vamos a\Nregresar 'number' por factorial de todo esto. Dialogue: 0,0:05:48.93,0:05:57.20,Default,,0000,0000,0000,,Entonces esto va a evaluar en 'number' que es 3.\NEse es el argumento que pasamos. Dialogue: 0,0:05:57.20,0:06:07.87,Default,,0000,0000,0000,,Multiplicado por factorial de 'number' menos 1. Dialogue: 0,0:06:07.87,0:06:11.20,Default,,0000,0000,0000,,Bueno 'number' - 1 va a evaluar en 2. Tres menos 1 es 2. Dialogue: 0,0:06:11.20,0:06:13.10,Default,,0000,0000,0000,,Entonces por factorial de 2. Dialogue: 0,0:06:13.12,0:06:15.80,Default,,0000,0000,0000,,Bueno eso es otra función llamada 'factorial'\Nentonces regresamos. Dialogue: 0,0:06:15.80,0:06:19.13,Default,,0000,0000,0000,,Bueno, factorial, pero ahora el argumento es 2.\NEntonces el 'number' es 2. Dialogue: 0,0:06:19.13,0:06:21.80,Default,,0000,0000,0000,,Vamos aquí. Si 'number' es menor que o igual a 1,\Nhacemos esto. Dialogue: 0,0:06:21.80,0:06:24.87,Default,,0000,0000,0000,,Pero 'number' no es menor que o igual a 1. Es 2.\NEntonces ahora hacemos 'else'. Dialogue: 0,0:06:24.87,0:06:30.33,Default,,0000,0000,0000,,Entonces lo que ahora queremos regresar es\N'number' por factorial 'number' menos 1. Dialogue: 0,0:06:30.33,0:06:31.60,Default,,0000,0000,0000,,Bueno, en esta situación... Dialogue: 0,0:06:31.60,0:06:38.00,Default,,0000,0000,0000,,En esta situación, 'number' es ahora 2 y vamos\Na querer multiplicar esas veces el factorial... Dialogue: 0,0:06:38.00,0:06:43.93,Default,,0000,0000,0000,,por el factorial de 2 - 1. Dialogue: 0,0:06:43.93,0:06:45.47,Default,,0000,0000,0000,,Bueno 2 - 1 es 1. Dialogue: 0,0:06:45.47,0:06:47.40,Default,,0000,0000,0000,,Por el factorial de 1. Dialogue: 0,0:06:47.40,0:06:52.53,Default,,0000,0000,0000,,Bueno, exactamente hemos hecho otra llamada\Na la función. Entonces el interpretador como que\Ntiene que recordar que hicimos toda esta Dialogue: 0,0:06:52.53,0:06:55.47,Default,,0000,0000,0000,,serie de llamadas a la función y tiene que\Nseguir excavando más profundo y más\Nprofundo y más profundo. Dialogue: 0,0:06:55.47,0:06:57.80,Default,,0000,0000,0000,,Ahora hemos llamado factorial de 1. Dialogue: 0,0:06:57.80,0:07:02.20,Default,,0000,0000,0000,,Factorial de 1. Cuál es el argumento? 'Number' se\Nrefiere a 1. Dialogue: 0,0:07:02.20,0:07:04.07,Default,,0000,0000,0000,,Si 'number' es menos que o igual a 1, Dialogue: 0,0:07:04.07,0:07:05.80,Default,,0000,0000,0000,,'number' es menor que o igual a 1. Dialogue: 0,0:07:05.80,0:07:08.60,Default,,0000,0000,0000,,Ahora esto es lo que llamamos un caso base.\NComo que estamos bajando hacia él. Dialogue: 0,0:07:08.60,0:07:11.73,Default,,0000,0000,0000,,Entonces 'number' es menor que o igual a 1. Regresa 1. Dialogue: 0,0:07:11.73,0:07:16.73,Default,,0000,0000,0000,,Entonces en esta situación, cuando llamamos\Nfactorial 1, literalmente regresa 1. Dialogue: 0,0:07:16.73,0:07:23.33,Default,,0000,0000,0000,,Y ahora sabemos que factorial de 2 evalúa en\N2 por 1. Dialogue: 0,0:07:23.33,0:07:36.20,Default,,0000,0000,0000,,Entonces esto evalúa en 2 y ahora sabemos que\Nfactorial de 3 evalúa en 3 por 2, lo que evaluará en 6. Dialogue: 0,0:07:36.20,0:07:39.80,Default,,0000,0000,0000,,Así que hay diferentes formas de pensar en esto,\Npero que dan exactamente el mismo resultado. Dialogue: 0,0:07:39.80,0:07:44.27,Default,,0000,0000,0000,,Una vez de nuevo, si tienes factorial de 3 + \Nfactorial de 3, no importa como lo implementamos, Dialogue: 0,0:07:44.27,9:59:59.99,Default,,0000,0000,0000,,obtendremos 6 + 6 o 12.