La .NET CONF 2024 acaba de terminar. Descubre las NOVEDADES de .NET 9 junto a los CAMBIOS que trae C# 13.
Puedes ver el contenido de este vídeo junto con su curso en el modo vídeo (similar a Udemy) si pulsas aquí.

Recursividad en programación

24 Aug 2019 8 min (0) Comentarios

 

 

En el post de hoy trataremos un tema muy importante dentro de la programación, como es, la recursividad, es cierto que es un termino que cuando lo estudias por primera vez cuesta, pero es muy sencillito. Hay que decir que no está destinado únicamente al entorno .Net, sino que sirve para todos los lenguajes de programación.

1 - Qué es la recursividad en programación?

La recursividad es un concepto que se indica cuando un método se llama a si mismo. Cuando creamos un método recursivo debemos tener en cuenta que este tiene que terminar por lo que dentro del método debemos asegurarnos de que no se está llamando a si mismo todo el rato, Lo que quiere decir que el ciclo es finito.

que es recursividad

Debemos tener mucho cuidado cuando realizamos llamadas recursivas ya que si la utilizamos sin control podríamos desbordar la memoria del ordenador, causando que el programa se rompa.

2 - Cuando utilizar recursividad?

Como se puede apreciar de la descripción anterior. Podemos utilizar recursividad para reemplazar cualquier tipo de bucle. A pesar de ello en el mundo laboral no se utiliza demasiado, debido a que un error puede ser trágico en la memoria, así como tener una lista con millones de datos, puede hacer que utiliza mucha memoria. Aun así, la gran mayoría de las veces, utilizamos recursividad para algoritmos de búsqueda u ordenación.

Se denomina caso base a la condición de terminación de la recursividad.

Ejemplo 1

Ejemplo es calcular el factorial de un numero.*multiplicar todos los números entre dos enteros. En matemáticas se expresa con n! donde n es el último número a comprobar.  Debemos empezar desde el 1.

Ejemplo utilizando un método iterativo

public static int FactorialIterativo(int numero)
{
    int i, resultado = 1;
    for(i=1; i <= numero; i++)
    {
        resultado = resultado * i;
    }
    return resultado;
}

El ejemplo utilizando método recursivo

public static int FactorialRecursivo(int numero)
{
    if (numero == 0) return 1;
    return numero * FactorialRecursivo(numero - 1);
}

3 - La pila de recursión

La memoria de un ordenador se divide en 4 segmentos

  • Segmento de código: almacena las instrucciones del programa en código máquina.
  • Segmento de datos: almacena las variables estáticas o constantes.
  • Montículo: almacena las variables dinámicas
  • Pila del programa: Parte destinada a las variables locales y parámetros de la función que se está ejecutando.

Cuando llamamos a una función (o método) el proceso es el siguiente

  1. Se reserva espacio en la pila para los parámetros de la función y sus variables locales.
  2. Se guarda en la pila la dirección de la línea del código desde donde se ha llamado al método.
  3. Se almacenan los parámetros de la función y sus valores en la pila.
  4. Finalmente se libera la memora asignada en la pila cuando la función termina y se vuelve a la llamada de código original.

En cambio, cuando la función es recursiva:

  • Cada llamada genera una nueva llamada a una función con los correspondientes objetos locales.
  • Volviéndose a ejecutar completamente, hasta la llamada a si misma. Donde vuelve a crear en la pila los nuevos parámetros y variables locales. Tantos como llamadas recursivas generemos.
  • Al terminar, se van liberando la memoria en la pila, empezando desde la última función creada hasta la primera, la cual será la ultima en liberarse.  

Uso del bloqueador de anuncios adblock

Hola!

Primero de todo bienvenido a la web de NetMentor donde podrás aprender programación en C# y .NET desde un nivel de principiante hasta más avanzado.


Yo entiendo que utilices un bloqueador de anuncios como AdBlock, Ublock o el propio navegador Brave. Pero te tengo que pedir por favor que desactives el bloqueador para esta web.


Intento personalmente no poner mucha publicidad, la justa para pagar el servidor y por supuesto que no sea intrusiva; Si pese a ello piensas que es intrusiva siempre me puedes escribir por privado o por Twitter a @NetMentorTW.


Si ya lo has desactivado, por favor recarga la página.


Un saludo y muchas gracias por tu colaboración

© copyright 2024 NetMentor | Todos los derechos reservados | RSS Feed

Buy me a coffee Invitame a un café