Está en la página 1de 32

Algoritmos y estructuras

de datos
Unidad 3: Recursión
Open class semana 5

Prof. Felipe de Jesús Chiu Martínez Matricula: 019800614 junio, 2022


Agenda de hoy
Estructura de la materia
Unidad 3. Recursión
Introducción
¿ De qué manera los algoritmos recursivos mejoran la eficiencia en la
escritura y ejecución de programas?
Objetivo
3.1 Definición
3.2 Diseño de algoritmos recursivos
3.3 Implementación de la recursión (ejemplos de recursivos)
Pregunta de investigación
Actividades semana 5
Recursos
Foro 3 Actividad Colaborativa (primera etapa)
Examen y exámenes autocalificables
Puntos Extras
Evidencias de aprendizaje
Cierre
Estructura de la materia
Semana 1 Semana 3
y semana 2 y Semana 4
Unidad 2
Unidad 1
Estructuras Dinámicas
Estructuras
de Datos Semana 5
Estáticas de Datos
Unidad 3

Recursión

Semana 6
y Semana 7

Unidad 4
Árboles
Unidad 3

Recursión
Introducción
¿De que manera los algoritmos recursivos mejoran la
eficiencia en la escritura y ejecución de programas?
La presente unidad tiene como objetivo que
reconozcan los elementos necesarios para solucionar
problemas computacionales basados en formatos
recursivos.

Deben entender que recursividad es la generación de


un proceso basado en su propia definición, es decir,
una parte de un programa tiene la capacidad de
repetirse por sí misma. Es importante entender el
concepto porque gracias a la recursión se pueden
optimizar muchos procesos y, con ello, se tiene un
mejor aprovechamiento de los recursos de una
computadora.
Objetivos
Ilustrar la utilización de algoritmos recursivos, a
partir de la definición y descripción de sus
características, para optimizar procesos y de esta
forma aprovechar los recursos de la computadora.

• Describir la definición y características del


concepto de recursividad.

• Diseñar e implementar algoritmos en formatos


recursivos.
¿Qué es la recursión?
3.Recursión
3.1 Definición
La recursión es un concepto amplio, difícil
de precisar. Aparece en numerosas
actividades de la vida diaria , por ejemplo,
en una fotografía de una fotografía. Otro
caso muy ilustrativo de recursión es el que
se presenta en los programas de televisión
en los cuales un periodista transfiere el
control a otro periodista que se encuentra
en otra ciudad, y éste hace lo propio con un tercero. En este
capítulo nos limitaremos a tratar la recursión como herramienta
de programación.
La recursión permite definir un objeto (problemas, estructuras de
datos) en términos de sí mismo. Casos típicos de estructuras de
datos definidas de manera recursiva son los árboles y las listas
ligadas. Algunos ejemplos de problemas que se definen
recursivamente se estudiarán posteriormente.
3.Recursión
3.1 Definición
Recursión: Es un proceso en el que mediante una
función se llama a sí misma de forma repetitiva,
hasta que se satisface alguna determinada
condición. El proceso se utiliza para computaciones
repetidas en las que cada acción se determina
mediante un resultado anterior.
Ejemplos de estructuras de recursión
son:
• Triángulo de Sierpinski
• Muñecas rusas (matryoshkas)
• Factorial de números
• Torres de Hanoi
3.Recursión
3.1 Definición
La recursividad consiste en funciones que se
llaman a sí mismas, evitando el uso de bucles y
otros iteradores. Un ejemplo fácil de ver y que se
usa a menudo es el cálculo del factorial de un
número entero.

Las aplicaciones que hemos visto hasta ahora se


estructuran de manera general como métodos que
llaman a otro método en una forma disciplinada y
jerárquica. No obstante, para algunos problemas es
útil que un método se llame a si mismo.
3.Recursión
3.1 Definición
Un método recursivo se llama a sí mismo, ya sea en
forma directa o indirecta a través de otro método.
La recursión es una herramienta muy potente en
algunas aplicaciones, sobretodo de cálculo. La
recursión puede ser utilizada como una alternativa a
la repetición o estructura repetitiva o iterativa.
3.Recursión
3.1 Definición
Cuando una función emite (llama) a una copia nueva de si
misma, se conoce como “una llamada recursiva” o también se
llama el “paso de recursión”. El paso de recursión también
incluye la palabra reservada RETURN.
Un requisito para que una función recursiva sea correcta es
que no genere una secuencia infinita de llamadas sobre si
misma. Cualquier función que genere una secuencia de ese
tipo no puede terminar nunca.
En consecuencia, la definición
recursiva debe incluir un
COMPONENTE BASE (Condición de
Salida) en el que el f(n) (la función)
se defina directamente (NO
recursivamente) para uno o más
valores de n. Debe existir una “forma
de salir” de la secuencia de llamadas
de salida.
3.Recursión
3.1 Definición
El paso de recursividad se ejecuta mientras la
llamada original al método sigue estando activa ( es
decir, mientras no haya finalizado la ejecución). El
paso de recursividad puede originar muchas más
llamadas recursivas.
3.Recursión
3.1 Definición
Para que la recursividad pueda terminar en un
momento dado, cada vez que el método se llama a
sí mismo con una versión un poco más simple del
problema original, la secuencia de problemas cada
vez más pequeños debe convergir en el caso base.
En ese punto, el método reconoce el caso base y
devuelve un resultado a la copia anterior del método.
3.Recursión
3.2 Diseño de algoritmos recursivos
Si dada la definición de un problema es posible
determinar el estado básico y el acercamiento
paulatino al mismo, entonces es posible llegar a una
solución.
Los ejemplos que aparecen a continuación, a pesar
que pueden resolverse de manera no recursiva,
permiten ilustrar claramente el concepto de
recursión.

El factorial de un número entero positivo n se define


como el producto de los números comprendidos
entre 1 y n. La expresión n! simboliza el factorial
de n. A continuación se ilustra el concepto de
factorial:
3.Recursión
3.2 Diseño de algoritmos recursivos
3.Recursión
3.2 Diseño de algoritmos recursivos
Por definición: De modo que una definición recursiva de la función factorial n
0! = 1 =1 es:
1! = 1 =1 n! = n * (n – 1) para n > 1
2! = 1*2 =2 El factorial de un entero n mayor o igual a 0, se puede calcular
3! = 1*2*3 =6 de modo iterativo (no recursivo), teniendo presente la
4! = 1*2*3*4 = 24 definición de n! del modo siguiente:
5! = 1*2*3*4*5 = 120 n! = 1 si n = 0 lo que sería el caso base (condición de
n! = 1*2*3*3*5*…… *(n-1)! salida)
Por lo tanto:
n! = n * (n – 1) ! Si n > 0
3.Recursión
3.2 Diseño de algoritmos recursivos
Otro caso clásico de problemas definidos recursivamente es el
cálculo de la serie de Fibonacci 0,1,1,2,3,5,8,13,21…, etc.
Recuerda que el Fibonacci de un número se obtiene de la suma
de los dos números Fibonacci anteriores. A continuación se
ilustrará el concepto de números de Fibonacci.
Por definición:
Fibonacci(0) = 0
Fibonacci(1) = 1
Fibonacci(2) = Fibonacci(1)+Fibonacci(0)
= 1+0=1
Fibonacci(3) = Fibonacci(2)+Fibonacci(1)
= 1+1=2
Fibonacci(4) = Fibonacci(3)+Fibonacci(2)
= 2+1=3
Por lo tanto, una fórmula de la definición recursiva para la serie de
Fibonacci sería:
n si (n=0) o (n=1)
Fibonacci(n) =
Fibonacci(n-1) + Fibonacci(n-2) si n > 1
3.Recursión
3.3 Ejemplos recursivos
Factorial de los primeros 10 números
3.Recursión
3.3 Ejemplos recursivos
Factorial de un número
3.Recursión
3.3 Ejemplos recursivos
Factorial de un número (cont.)
3.Recursión
3.3 Ejemplos recursivos
Factorial de un número (cont.)
3.Recursión
3.3 Ejemplos recursivos
Serie Fibonacci
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Fibonacci
{
class Program
{
static long Fibonnaci(int n)
{
if (n == 0 || n == 1) return 1;
else return Fibonnaci(n - 1) + Fibonnaci(n - 2);
}

static long FibonnaciIterativo(int n)


{
if (n < 0) throw new Exception("El parámetro debe ser
positivo");
long ultimo = 1, penultimo = 1;
for (int k = 2; k <= n; k++)
{
long temp = penultimo; penultimo = ultimo; ultimo =
ultimo + temp;
}
return ultimo;
}

static void Main(string[] args)


3.Recursión
3.3 Ejemplos recursivos
Serie Fibonacci(cont.)
{
//Prueba de Fibonnaci
//Probar con valores hasta que se note la diferencia de tiempo entre la solución recursiva y la iterativa
do
{
Console.WriteLine("\nEntre el número a buscar de Fibonnaci (Presione Enter para salir)");
string s4 = Console.ReadLine();
if (s4.Length == 0) break;
int k = Int32.Parse(s4);
Console.WriteLine("El número {0} de la sucesión de Fibonnaci (via iterativa) es {1}", k, FibonnaciIterativo(k));
Console.WriteLine("El número {0} de la sucesión de Fibonnaci (via recursiva) es {1}", k, Fibonnaci(k));
} while (true);

}
}
}
3. Recursión
Conclusiones
• La recursividad es una opción para encontrar solución
a problemas que a las estructuras iterativas se les
complica obtener.

• Si bien es cierto que en algunas ocasiones la


recursividad ocupa mas espacio de memoria que las
estructuras iterativas, la simplicidad y efectividad
para encontrar una solución lo justifica.

• Sin embargo, se debe estar preparado para tomar la


mejor decisión, no olvidemos que toda solución
recursiva se puede resolver iterativamente, solo
debemos seleccionar la mejor opción que nos permita
solucionar el problema.
2.Estructuras dinámicas de datos
Pregunta de investigación

Describa la función recursiva de las torres de


Hanoi, es decir, en que consisten las torres de
Hanoi y como se define su algoritmo recursivo.
Proporcione un ejemplo del mismo.

Proporcionen en formato Apa sus referencias


bibliográficas, por favor.
Actividades semana 5
Recursos semana 5
Actividades semana 5
Foro semana 5

Segunda etapa (del 02 al 06 de junio):


Actividades semana 5
Examen semana 5

Modalidad de exámenes | Semana 5 miércoles, 08 de junio de 2022, 23:55

Exámenes autocalificables
Actividades semana 5
Puntos extras
Actividades semana 5
Evidencias de aprendizaje
MUCHAS GRACIAS
POR TU ATENCION

También podría gustarte