Está en la página 1de 35

Algoritmos y estructuras de

datos
Unidad 3: Recursión

Prof. Felipe de Jesús Chiu Martínez


Matricula: 019800614
Open class semana 5
Índice
Estructura de la materia
Unidad 3. Recursión
Introducción
Objetivo
Resultados de aprendizaje
3.1 Definición
3.2 Diseño de algoritmos recursivos
3.3 Ejemplos recursivos)
3.4 Recursividad vs. iteración
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 1 Unidad 2
Estructuras Está- Estructuras Diná-
ticas de Datos micas de Datos Semana 5
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.
Resultados de aprendizaje
• Describir la definición y características del
concepto de recursividad.

• Diseñar e implementar algoritmos en formatos


recursivos.
3.Recursión

¿Qué es una 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 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.
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:
• Serie de Fibonacci
• 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.
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.
3.Recursión
3.1 Definición
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.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.
3.Recursión
3.2 Diseño de algoritmos recursivos
Factorial de un número
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:
Por definición:
0! = 1 =1
1! = 1 =1
2! = 1*2 =2
3! = 1*2*3 =6
4! = 1*2*3*4 = 24
5! = 1*2*3*4*5 = 120
n! = 1*2*3*3*5*…… *(n-
1)!
3.Recursión
3.2 Diseño de algoritmos recursivos
Factorial de un número
De modo que una definición recursiva de la función factorial n es:
n! = n * (n – 1) para n > 1
El factorial de un entero n mayor o igual a 0, se puede calcular de modo iterativo (no
recursivo), teniendo presente la definición de n! del modo siguiente:
n! = 1 si n = 0 lo que sería el caso base (condición de salida)
Por lo tanto:
n! = n * (n – 1) ! Si n > 0
3.Recursión
3.2 Diseño de algoritmos recursivos
Serie de Fibonacci
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
3.Recursión
3.2 Diseño de algoritmos recursivos
Serie de Fibonacci
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

0 1 2 3 4 5 6 7 8 9 10
0 1 1 2 3 5 8 13 21 34 55
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

#06b706
3.Recursión
3.3 Ejemplos recursivos
Factorial de un número

#06b706
3.Recursión
3.3 Ejemplos recursivos
Serie de 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)


{
#06b706
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;
}
3.Recursión
3.3 Ejemplos recursivos
Serie {de Fibonacci
//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);

}
} #06b706
}
3.Recursión
3.4 Recursividad vs iteración
3.Recursión
3.4 Recursividad vs iteración
3.Recursión
3.4 Recursividad vs iteración
3.Recursión
3.4 Recursividad vs iteració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.
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
Actividades semana 5

Primera etapa (del 29 de marzo al 10 de abril


Actividades semana 5
Actividades semana 5
Evidencias de aprendizaje
Muchas Gracias

También podría gustarte