Está en la página 1de 8

Tecnológico Nacional de México

Instituto Tecnológico de Tijuana


SUBDIRECCIÓN ACADÉMICA

DEPARTAMENTO DE SISTEMAS Y COMPUTACIÓN

SEMESTRE: FEBRERO – JUNIO 2022

INGENIERÍA EN SISTEMAS COMPUTACIONALES

E.D.D. Serie 2SC3C

Unidad 2 - Recursividad

Hernandez Carrillo Gabriel 20211789

M.C.C. LUZ ELENA CORTEZ GALVAN

14/Marzo/2022
a) ÍNDICE
2.1 - Concepto, Tipos de Recursividad, Ventajas y Desventajas..3
2.3.1 - Mecánica de Recursión………………………………………6
2.3.2 - Escritura de Métodos Recursivos…………………………...7

2
2.1 - Concepto, Tipos de Recursividad, Ventajas y Desventajas.
a)¿Qué es la recursividad?
La recursividad es un concepto que se indica cuando un método se llama a sí 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 sí mismo todo el rato, Lo que quiere decir que el ciclo es finito.
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.

b)¿Cuáles son los tipos de recursividad que existen?


● Recursión directa: Cuando el código A tiene una sentencia que involucra a A.
● Recursión indirecta o cruzada: Cuando la función A involucra una función B que
invoca a la vez una función C, y así sucesivamente, hasta que se involucra la
función A. Por ejemplo el algoritmo de Par o impar.
● Recursión simple: Aquella en cuya función solo aparece una llamada recursiva.
Se puede transformar con facilidad en algoritmos iterativos.
Recursión múltiple: Se da cuando hay más de una llamada a sí misma dentro del
cuerpo de la función, resultando más difícil de transformar a iterativa. Por
ejemplo el algoritmo de Fibonacci.

c) Ventajas y Desventajas de la recursividad.


Ventajas:
● Soluciones a problemas complejos de una manera más fácil, simple, clara y
elegante.
● No es necesario definir la secuencia de pasos exacta para resolver el problema.
● Podemos considerar que “tenemos resuelto el problema” (de menor tamaño).
● La eficiencia de la recursividad reside en el hecho de que se puede usar para
resolver problemas de difícil solución iterativa.
● Algunos problemas son más sencillos de implementar usando la recursividad.
● Presenta una facilidad para comprobar y verificar que la solución es correcta.
Desventajas:
● Ineficiencia.
● Sobrecarga asociada con las llamadas subalgoritmos.
● Una simple llamada puede generar un gran número de llamadas recursivas.

3
● Puede que la claridad del algoritmo no compense la sobrecarga del mismo
● Algoritmos recursivos ineficientes.
● Es necesario la creación de muchas variables lo que puede ocasionar problemas
en memoria.
● En general, una función recursiva toma más tiempo en generarse que una
iterativa.
● Debido a las llamadas constantes a métodos, a la creación de variables
dinámicas en la pila y la duplicación de las variables.

d) Programa ejemplo en C# consola que utiliza recursividad.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Tarea_2._1
{
class Program
{
public static void Proceso(int num)
{
int sumatoria;
char caracter;
int num2;
Console.Write("Ingrese otro numero: ");
num2 = int.Parse(Console.ReadLine());
sumatoria = num + num2;
Console.WriteLine("\n1.- Ingresar otro numero");
Console.WriteLine("2.- Mostrar sumatoria");

4
caracter = Console.ReadKey().KeyChar;
Console.WriteLine();
if (caracter == '1')
{
Console.Clear();
Proceso(sumatoria);
}
else if (caracter == '2')
{
Console.Clear();
Console.WriteLine("Sumatoria de los numeros: {0}", sumatoria);
}
}
static void Main(string[] args)
{
int numero;
Console.Write("Ingrese un numero: ");
numero = int.Parse(Console.ReadLine());
Proceso(numero);
Console.ReadLine();
}
}
}

5
2.3.1 - Mecánica de Recursión.
a) Cuál es la Mecánica que se sigue en la Recursividad?
La mecánica de la recursividad está basada en una “pila”. Cuando un módulo recursivo
se está ejecutando se crea en la memoria de la computadora una pila donde se
almacenan los valores de los parámetros y de las variables locales del módulo. Si el
módulo es función también se guarda en la pila el valor que adquiere la misma.
Para cada llamada del módulo se almacenan en la pila los nuevos valores de los
parámetros y de las variables locales, creándose un nuevo “registro de activación”. De
tal forma que, la pila de recursión está formada por registros de activación. Al terminar
una llamada al módulo, es decir, cuando se cumple la definición base, se libera (sale) el
registro de activación que se encuentra en el tope de la pila. De esta forma es como
puede “recordar” qué valores tenían los parámetros y las variables locales en la
llamada anterior.
No sólo debe recordar los valores que tenían los parámetros y las variables locales al
realizarse la correspondiente llamada al módulo sino que también tiene que recordar
qué instrucción debe realizar al terminar esa llamada. De tal forma que los registros de
activación están compuestos básicamente de:
1. Instrucción a la que debe regresar el control una vez terminada la ejecución actual
del módulo.
2. Todos los parámetros y variables locales del módulo.
3. Si el módulo recursivo es una función el valor que adquiere la misma, ya que éste se
debe regresar.
Para hacer la representación de la pila de recursión numeramos las instrucciones a las
que debe regresar el control una vez terminada la ejecución del módulo recursivo y
estos valores son los que ponemos en la pila.
Examinaremos qué significa lo anterior cuando se aplica la función factorial. 4! Es un
caso más complejo que 3!. La transformación que se aplica al número a para obtener 3
es sencillamente restar 1. Si restamos 1 de 4 de manera sucesiva llegamos a 0, que es
el caso trivial. Así, si se puede definir 4! en términos de 3! y, en general, n! en términos
de (n – 1)!, se podrá calcular 4! mediante la definición de n! en términos de (n – 1)! al
trabajar, primero hasta llegar a 0! y luego al regresar a 4!. En el caso de la función
factorial se tiene una definición de ese tipo, dado que:
n! = n * (n – 1)! Así, 4! = 4 * 3! = 4 * 3 * 2! = 4 * 3 * 2 * 1! = 4 * 3 * 2 * 1 * 0! = 4 * 3 * 2] * ]
= 24

6
2.3.2 - Escritura de Métodos Recursivos.
a) ¿Cuáles son los pasos para escribir un Método Recursivo
Eficiente?
1. Planteamiento recursivo. Se ha de encontrar una estrategia recursiva para
alcanzar la postcondición, es decir, la solución. A veces, la forma de la
postcondición, o de las operaciones que en ella aparecen, nos sugerirá
directamente una estrategia recursiva.
2. Análisis de casos. Se trata de identificar y obtener las condiciones que
permiten discriminar los casos directos de los recursivos.
3. Descomposición recursiva. Se trata de obtener la función sucesor s(~x) que
nos proporciona los datos que empleamos para realizar la llamada recursiva.
4. Función de acotación y terminación. Determinamos si la función sucesor
escogida garantiza la terminación de las llamadas, obteniendo una función que
estime el número de llamadas restantes hasta alcanzar un caso base -la función
de acotación y justificando que se decrementa en cada llamada.
5. Llamada recursiva. Pasamos a ocuparnos entonces del caso recursivo. Cada
una de las descomposiciones recursivas ha de permitir realizar la(s) llamada(s)
recursiva(s), es decir, la función sucesor debe proporcionar unos datos que
cumplan la precondición de la función recursiva para estar seguros de que se
realiza la llamada recursiva con datos válidos.
6. Función de combinación. Lo único que nos resta por obtener del caso
recursivo es la función de combinación, que, en el caso de la recursión simple,
será de la forma ~y = c(~x, ~y′). Si hubiese más de un caso recursivo, habría
que encontrar una función de combinación para cada uno de ellos.
7. Escritura del caso recursivo. Lo último que nos queda por decidir es si
necesitamos utilizar en el caso recursivo todas las variables auxiliares que han
ido apareciendo.

7
Fuentes de Información (formato APA).
2.1 - Concepto, Tipos de Recursividad, Ventajas y Desventajas
N. (s. f.). Recursividad en programación. Copyright NetMentor. Recuperado 28 de
febrero de 2022, de https://www.netmentor.es/entrada/Recursividad-programacion
LUDA UAM-Azc. (s. f.). Aniei. Recuperado 28 de febrero de 2022, de
http://aniei.org.mx/paginas/uam/CursoAA/curso_aa_09.html

2.3.1 - Mecánica de Recursión.


D. (2022, 9 marzo). 4.3 Mecanica Recursion. Blogspot. Recuperado 8 de marzo de
2022, de
http://estructura-de-datos-itsav.blogspot.com/2012/03/43-mecanica-recursion.html

2.3.2 - Escritura de Métodos Recursivos.


Facultad de Informática - UCM
https://www.cartagena99.com/recursos/alumnos/apuntes/4.%20Diseno%20de%20Algor
itmos%20Recursivos.pdf

También podría gustarte