Recursividad parte2

Christian Pinzón
11 Jul 200909:19

Summary

TLDREl guion del video explica cómo funciona la recursividad en la programación, utilizando el ejemplo del cálculo del factorial de un número. Se describe el proceso de llamar una función a sí misma con un parámetro reducido hasta que se cumple una condición base. Se simula paso a paso cómo se ejecuta el programa, mostrando cómo se guardan y recuperan los estados en la pila de llamadas para regresar a los puntos de ejecución anteriores, ilustrando así la naturaleza de las funciones recursivas y su implementación en lenguajes de programación como C.

Takeaways

  • 📝 La función factorial se puede implementar de manera recursiva en C.
  • 🔄 La recursividad implica que una función se llama a sí misma hasta alcanzar una condición base.
  • 🔢 El factorial de un número se calcula multiplicando ese número por todos los números menores hasta llegar al uno.
  • 🌐 Se simula el proceso paso a paso para comprender cómo funciona la recursividad.
  • 💡 Se utiliza el ejemplo del factorial de 4 para explicar cómo funciona la recursividad en detalle.
  • 📚 Se menciona que la condición base para detener la recursión es cuando n es igual a 0.
  • 🔄 Se describe el proceso de llamada y retorno de funciones recursivas como una pila, donde se guardan los estados.
  • 💾 Se explica que la pila de memoria es fundamental para que el programa recuerde dónde continuar después de una llamada recursiva.
  • 🔙 Se destaca la importancia de devolver valores de las funciones para que se puedan calcular los factoriales de los parámetros anteriores.
  • 🛠️ Se ilustra cómo se guardan y recuperan valores de la pila para mantener el estado de la ejecución entre llamadas recursivas.

Q & A

  • ¿Qué es un factorial y cómo se calcula?

    -El factorial de un número entero positivo n, representado como n!, es el producto de todos los números enteros positivos desde 1 hasta n. Se calcula multiplicando n por todos los números menores que él hasta llegar al 1.

  • ¿Qué es una función recursiva y cómo se relaciona con el ejemplo del factorial?

    -Una función recursiva es aquella que se llama a sí misma dentro de su definición. En el ejemplo del factorial, la función se llama a sí misma con un parámetro reducido hasta que alcanza la condición de base (n = 0), lo que permite calcular el factorial de manera iterativa sin utilizar bucles.

  • ¿Cómo se representa la condición de base en la función recursiva del factorial?

    -La condición de base en la función recursiva del factorial se representa con la condición 'n == 0', que cuando se cumple, la función devuelve 1, lo que es el factorial de 0.

  • ¿Qué sucede si la condición de base no se cumple en una función recursiva?

    -Si la condición de base no se cumple, la función recursiva continuará llamando a sí misma con un nuevo parámetro hasta que finalmente se cumpla la condición y pueda devolver un valor.

  • ¿Cuál es el parámetro inicial que se utiliza para calcular el factorial de 4 en el ejemplo?

    -El parámetro inicial utilizado para calcular el factorial de 4 en el ejemplo es el número 4 mismo, ya que se desea calcular 4!.

  • ¿Qué papel juega la pila en la ejecución de funciones recursivas?

    -La pila es un espacio en memoria que guarda temporalmente los valores necesarios para que una función recursiva pueda regresar a su estado anterior después de cada llamada. Almacena direcciones y valores de parámetros que permiten la navegación correcta a través de las llamadas recursivas.

  • ¿Cómo se resuelve la llamada recursiva cuando se llega al factorial de 1 en el ejemplo?

    -Cuando se llega al factorial de 1 en el ejemplo, ya no se hace ninguna llamada recursiva adicional, ya que el factorial de 1 es conocido (1! = 1), y se devuelve ese valor a la llamada anterior.

  • ¿Qué significa el término 'retornar' en el contexto de funciones recursivas?

    -En el contexto de funciones recursivas, 'retornar' significa devolver un valor a la llamada de la función que invocó la recursión, permitiendo así la resolución de la operación y el avance en el cálculo del factorial.

  • ¿Cómo se demuestra la eficacia de la recursividad en el cálculo del factorial sin utilizar bucles?

    -La eficacia de la recursividad en el cálculo del factorial se demuestra al mostrar que, a pesar de no utilizar bucles como while o for, se puede realizar el cálculo de manera efectiva y eficiente a través de la repetida invocación de la función a sí misma con parámetros adecuados.

  • ¿Cuál es la ventaja de usar recursividad en problemas como el cálculo del factorial?

    -La ventaja de usar recursividad en problemas como el cálculo del factorial es que permite una solución clara y elegante al problema, simplificando el código y haciendo que sea más fácil de entender y mantener, a pesar de que en algunos casos pueda tener un overhead de memoria debido al uso de la pila.

Outlines

00:00

😀 Explicación de la función factorial recursiva

El primer párrafo explica el concepto de la función factorial de manera recursiva en el lenguaje de programación C. Se describe cómo se implementa la función de tal manera que, si el parámetro 'n' es igual a 0, la función devuelve 1. En caso contrario, se llama a sí misma con el parámetro reducido en uno. Se utiliza un ejemplo práctico para ilustrar cómo se calcula el factorial de 4, mostrando paso a paso las llamadas recursivas y cómo se resuelven hasta llegar al resultado final. Se enfatiza la naturaleza recursiva de la función y cómo se mantiene el estado de las llamadas anteriores mediante la pila de llamadas.

05:02

🧠 Funcionamiento de la recursividad y la pila de llamadas

El segundo párrafo profundiza en cómo funciona la recursividad detrás de las escenas, utilizando la pila de llamadas como mecanismo para recordar el estado de las funciones previamente llamadas. Se explica que cada vez que se llama a una función recursiva, se guarda la dirección y el estado actual en la pila, permitiendo que el programa regrese a la llamada anterior una vez que la función actual termina de ejecutarse. Se utiliza el ejemplo del factorial para demostrar cómo se apilan y desapilan los estados, y cómo se resuelven las llamadas recursivas hasta alcanzar el resultado final. Se destaca la importancia de la pila para el correcto funcionamiento de la recursividad en programas.

Mindmap

Keywords

💡Recursividad

La recursividad es un concepto en programación donde una función llama a sí misma para resolver un problema más pequeño como parte de la solución a un problema más grande. En el guion, se utiliza para calcular el factorial de un número, llamando a la función factorial con argumentos decrementados hasta que alcanza el caso base. Esto se ejemplifica cuando el guion describe cómo calcular el factorial de 4, lo que implica llamadas recursivas para calcular factoriales de 3, 2, 1 y finalmente 0.

💡Factorial

El factorial de un número entero n, denotado como n!, es el producto de todos los números enteros positivos desde n hasta 1. En el guion, el factorial es el resultado que se busca calcular mediante una función recursiva. Se menciona que el factorial de 4 (4!) se calcula multiplicando 4 por el factorial de 3, y así sucesivamente hasta llegar al factorial de 0, que es 1.

💡Condición base

La condición base es una instancia especial en un proceso recursivo que detendrá la recursión. En el guion, la condición base se establece cuando n es igual a 0, en cuyo caso la función devuelve 1. Esto se refleja cuando el guion habla sobre la necesidad de una condición que detenga la llamada recursiva, evitando así un bucle infinito.

💡Pila

La pila es una estructura de datos que sigue el principio de 'último en entrar, primero en salir' (LIFO). En el guion, la pila se menciona como el mecanismo por el cual el programa guarda la información necesaria para regresar a las llamadas de funciones anteriores una vez que se resuelven las llamadas recursivas. Esto se ve en acción cuando el guion describe cómo se guardan y recuperan los valores de n y las direcciones de las funciones en la pila durante el proceso de cálculo del factorial.

💡Parámetro

Un parámetro es un valor que se pasa a una función para personalizar su comportamiento. En el guion, los parámetros son los valores que se pasan a la función factorial en cada llamada recursiva, como cuando se calcula el factorial de 4 y se pasan valores decrementados (3, 2, 1, 0) hasta alcanzar la condición base.

💡Código

El código es la representación en lenguaje de programación de un conjunto de instrucciones para que un computador realice una tarea. En el guion, el código se refiere al conjunto de instrucciones escritas en C que implementa la función recursiva para calcular el factorial de un número.

💡Función

Una función es un bloque organizado de código que realiza una tarea específica y puede ser invocado por su nombre. En el guion, la función factorial es el ejemplo principal, mostrando cómo se define y se llama a sí misma de manera recursiva para calcular el factorial de un número.

💡Memoria

La memoria es el espacio en el que un computador almacena datos y programas temporalmente mientras se ejecutan. En el guion, la memoria se refiere al espacio donde se guardan temporalmente los valores necesarios para la ejecución de las funciones recursivas, como se menciona con la pila.

💡Llamada a función

Una llamada a función es la invocación de una función con la intención de ejecutar su código. En el guion, las llamadas a función son las instancias en las que se ejecuta la función factorial con diferentes valores de n, como se describe en el proceso de cálculo del factorial de 4.

💡Algoritmo

Un algoritmo es una serie de pasos definidos para resolver un problema. En el guion, el algoritmo se refiere al proceso de cálculo del factorial de un número a través de una función recursiva, que se describe paso a paso en el video.

Highlights

Explicación de cómo implementar una función factorial recursiva en C.

La condición base de la función factorial es n == 0, que devuelve 1.

La función se llama a sí misma con un argumento reducido para calcular el factorial.

Se describe el proceso de ejecución paso a paso de una función recursiva.

El factorial de un número se calcula multiplicando por todos los números menores hasta llegar a 1.

Se simula la ejecución de la función factorial para el número 4.

Se detalla cómo se realiza la llamada recursiva a la función factorial con n = 3.

Se explica la necesidad de volver a llamar a la función para calcular el factorial de 2.

Se describe el proceso de cómo se calcula el factorial de 1, que es la condición base.

Se menciona la importancia de la pila de llamadas para el funcionamiento de la recursividad.

Se explica cómo la pila guarda la información necesaria para regresar a la llamada anterior.

Se describe cómo se apilan las llamadas a la función factorial y cómo se desapilan al regresar.

Se detalla cómo se calcula el factorial de 3 y se devuelve el resultado a la llamada anterior.

Se explica el proceso de cómo se calcula el factorial de 2 y se devuelve el resultado.

Se describe el cálculo final del factorial de 4 y cómo se devuelve el resultado al menú principal.

Se discute cómo la recursividad permite repetir código sin utilizar ciclos while o for.

Se explica el concepto de pila en la memoria y su papel en la ejecución de funciones recursivas.

Transcripts

play00:00

lenge de c si se dan cuenta es bastante

play00:04

sencillo de hacer Prácticamente solo

play00:07

plasme las mismas condiciones que tenía

play00:09

hace un rato en código c la condición c

play00:13

n es igual a 0 entonces que me regrese

play00:16

un uno verdad y si no que me llame otra

play00:20

vez a la función con un con el parámetro

play00:22

reducido a uno multiplicado por el mismo

play00:26

parámetro y luego devolvemos ese valor

play00:30

esta sería la función factorial

play00:32

recursiva Por qué es recursiva porque

play00:35

dentro de la misma función estoy

play00:38

volviendo a llamar a esa función recurre

play00:42

a sí misma es por eso el

play00:45

término pero veámoslo funcionando veamos

play00:48

realmente cómo trabajaría ya nuestro

play00:50

código vamos a hacer una especie de

play00:53

simulación como si estuviéramos

play00:54

corriendo paso a paso nuestro

play00:57

programa Entonces digamos que desde el

play01:00

menú principal Yo estoy colocando en mi

play01:03

parámetro de la función factorial el

play01:05

número cuatro es decir que quiero

play01:07

calcular el factorial de 4 si se dan

play01:09

cuenta para los que aún no se habían

play01:11

dado cuenta ese algoritmo matemático que

play01:13

estábamos viendo hace un rato Es el

play01:15

mismo que estoy trabajando aquí que es

play01:19

está relacionado con la función

play01:21

factorial el factorial si si ustedes

play01:24

saben se calcula a partir del número que

play01:26

se entrega y se multiplica por todos los

play01:29

númer nmeros menores a él hasta llegar

play01:31

al uno pero aquí lo estamos haciendo de

play01:34

forma

play01:35

recursiva Entonces vamos a utilizar la

play01:38

función por primera vez ya que yo estoy

play01:40

queriendo calcular el factorial y lo que

play01:42

tengo aquí a la derecha va a representar

play01:44

a esa función este cuadro rosado

play01:47

representa a la llamada de esa función

play01:49

que en este caso su parámetro n es igual

play01:52

a

play01:52

4 entonces vamos a pasar a la siguiente

play01:55

línea n como dijimos vale 4 entonces no

play01:59

es igual a 0 por lo tanto no cumple esta

play02:01

condición y se pasa al els luego va a

play02:05

pasar a esta línea qué es lo que tendría

play02:07

que ser aquí tendría que multiplicar ese

play02:10

4 por el valor de factorial de 3 pero yo

play02:13

no sé el factorial de TR Entonces como

play02:16

no sabemos el valor del factorial de 3

play02:19

se vuelve a llamar a esa función por sí

play02:23

misma esto que tengo acá sería la nueva

play02:26

llamada a esa misma función pero en este

play02:28

caso le estoy enviando como parámetro la

play02:30

n = 3 pero quedó pendiente todavía la

play02:35

función que estábamos haciendo hace un

play02:37

rato Por eso es que queda atrás Solo que

play02:39

la estamos haciendo a un lado por un

play02:41

momento en lo que encontramos el

play02:42

factorial de TR pero posteriormente

play02:44

debemos regresar a la función que

play02:46

estábamos trabajando ya que dejamos

play02:48

todavía algunas líneas de código sin

play02:51

ejecutar Entonces vamos a calcular el

play02:53

factorial de 3 y muy bien sabemos que n

play02:57

no es igual a 0 entonces una vez más va

play02:59

a llegar a esta línea donde me va a

play03:01

querer calcular 3 por el factorial de 2s

play03:04

pero como no sabemos el factorial de dos

play03:06

va a dejar pendientes estas líneas de

play03:09

código que todavía no está ejecutando y

play03:12

va a volver a llamar a la función solo

play03:15

que ahora le va a enviar el parámetro

play03:17

dos y como dos tampoco es igual a 0 va a

play03:20

volver a hacer lo mismo va a calcular 2

play03:24

por el factorial de 1 pero como no

play03:26

conozco el factorial de un va a dejar

play03:28

pendiente este las líneas de código y va

play03:31

a volver a llamar a la función

play03:33

enviándole como parámetro el uno uno

play03:37

todavía no cumple con esta condición

play03:39

entonces una vez más va a querer

play03:41

calcular uno por el factorial de

play03:44

cer0 pero como no conoce el factorial de

play03:47

oero va a volver a llamar a la

play03:49

función para encontrar ese factorial el

play03:52

parámetro ahora s es cer Entonces como n

play03:55

es igual a 0 Ahora sí se cumple la

play03:57

condición de que va a valer un es

play04:00

factorial ahora sí se pasa a la línea de

play04:04

código que regresa ese valor a la

play04:05

función anterior entonces este uno se lo

play04:08

va a devolver a la llamada anterior

play04:10

donde Fue

play04:12

llamado y después una vez hecho esto

play04:15

Ahora sí puedo terminar esta función o

play04:18

esta llamada a la función la cierro con

play04:20

la llave como es en el código de c y

play04:24

regreso a la función en la que me había

play04:26

quedado en la línea de código en la que

play04:29

había quedado si se recuerdan me había

play04:32

quedado un un por factorial de 0 Pero

play04:34

ahora sí puedo hacer la operación ya que

play04:36

ya son números y 1 por 1 me da

play04:40

1 devuelvo este uno a la función en la

play04:44

cual llamé a esta

play04:46

función entonces este factorial de un

play04:48

Ahora sí va a tomar el valor de

play04:50

1 y cierro esta función y al cerrarla

play04:54

debo regresar a la función que tenía

play04:56

anteriormente en la línea de código en

play04:59

la que nos nos habíamos quedado y vamos

play05:01

a hacer el cálculo una vez más 2 * 1 es

play05:04

2 y voy a reemplazar ese factorial de 2

play05:07

se lo voy a devolver con la función

play05:11

return y una vez más voy a cerrar esta

play05:14

función porque se ha

play05:16

acabado nuevamente regresamos a la línea

play05:19

en la que se había quedado esta función

play05:21

se hace la operación se le devuelve el

play05:25

valor o el resultado obtenido a la

play05:28

función o al código donde fue

play05:30

llamada y luego cerramos una vez más esa

play05:35

función y por último Hemos llegado

play05:37

entonces a la primer llamada que hicimos

play05:40

a esa función hacemos el cálculo y ahora

play05:43

devolvemos el valor de al menú principal

play05:46

que fue donde llamamos inicialmente esta

play05:48

función y por último cerramos esa

play05:51

función si se dan cuenta entonces sin

play05:54

utilizar ciclos sin utilizar ningún

play05:57

While o for estoy haciendo haciendo que

play05:59

se repita muchas veces este código pero

play06:02

lo estoy haciendo a través de de la

play06:05

recursividad

play06:07

para para entender un poquito mejor cómo

play06:10

funciona esto vamos a ver el mismo

play06:13

ejemplo Pero cómo trabaja tras

play06:16

bambalinas una vez más tenemos el primer

play06:19

procedimiento verdad o la primer función

play06:22

pero se va volver a llamar a esa misma

play06:24

función enviándole el parámetro 3 sin

play06:27

embargo Cómo es que el programa Pues de

play06:29

que de que la llama es capaz de regresar

play06:32

a donde se había quedado es necesario

play06:35

utilizar algo que se llama pila que es

play06:37

un espacio en memoria donde voy a ir

play06:39

alojando por un momento valores que me

play06:42

van a servir después entonces es

play06:45

necesario que guarde en esa pila la

play06:48

dirección en la cual me encontraba en el

play06:50

procedimiento o en la función al momento

play06:52

que la volví a llamar Con qué propósito

play06:56

Para que posteriormente cuando ya cierre

play06:58

esa función y quiera regresar a donde

play07:00

estaba antes pues pueda acceder a ese

play07:03

lugar verdad Entonces en este caso vamos

play07:06

a meter a la pila la dirección del

play07:08

procedimiento uno y ojo que también me

play07:10

guardo el valor de n Por qué me va me va

play07:13

a guardar el valor de n porque

play07:15

recordemos que estamos usando una sola

play07:17

variable que es la variable

play07:19

n pero si después vuelvo yo a llamar a

play07:23

ese mismo procedimiento esa variable va

play07:26

a tomar el nuevo valor el nuevo

play07:27

parámetro que yo le estoy enviando que

play07:28

es TR

play07:30

pero cuando yo regrese cómo le voy a

play07:31

hacer para recordar que en realidad era

play07:33

cu y no TR es necesario entonces

play07:36

almacenar también el valor que tenía en

play07:39

ese momento n si esa función tuviera más

play07:42

parámetros Pues sería necesario

play07:43

guardarlos todos Ya que si la vuelvo a

play07:45

llamar voy a reutilizarlos

play07:48

verdad Y nuevamente esta llamada pues

play07:51

necesita encontrar el factorial de dos

play07:52

por lo tanto va a hacer otra llamada a

play07:54

esa misma función Pero entonces tenemos

play07:57

que almacenar la dirección de este

play07:59

procedimiento y el valor actual de

play08:02

n si se dan cuenta los va a ir colocando

play08:06

uno encima del otro quedando hasta abajo

play08:09

el primero que guardamos es por eso que

play08:11

se le llama pila porque los está

play08:13

colocando como si los estuviéramos

play08:15

apilando como si

play08:28

apilánez colocar también en la pila la

play08:30

dirección del procedimiento 3es y su

play08:32

parámetro que ahora vale dos Y

play08:35

nuevamente vamos a hacer lo mismo con el

play08:38

procedimiento cuatro vamos a guardar su

play08:42

dirección y su parámetro por último esta

play08:46

función de acá ya me ha devuelto un

play08:48

valor Entonces ya no necesito guardar

play08:49

nada en la pila porque ya no la voy a

play08:51

volver a

play08:52

llamar pero ahora que la cierre Cómo le

play08:55

hago para regresar al procedimiento que

play08:57

estaba antes Pues para eso tengo la

play09:00

dirección aquí únicamente me dirijo a la

play09:02

pila al último valor que está en la pila

play09:05

o al primero que encuentro al primero

play09:07

que puedo acceder y lo

play09:10

tomo Entonces lo voy a tomar y con eso

play09:13

puedo regresar al procedimiento y

play09:15

obviamente también tengo que tomar el

play09:17

valor que tenía n en ese

Rate This

5.0 / 5 (0 votes)

Etiquetas Relacionadas
ProgramaciónRecursividadFactorialEjemplo PrácticoCódigo CFuncionesMemoria PilaAlgoritmosSimulaciónEducativo