Está en la página 1de 16

Instituto Tecnolgico Superior de

Coatzacoalcos
Ingeniera en Sistemas Computacionales

Nombre del Alumno:

Contreras

Rodrguez

Apellido Paterno

Apellido Materno

Octavio
Nombre(s)

PORTAFOLIO DE EVIDENCIAS
Estructura de datos
No. Control:

CALCULO DIFERENCIAL
14082078

Nombre del Docente:


Blanquet
Apellido Paterno

Semestre:

Escobar

Landy

Apellido Materno

Nombre(s)

Grupo:

INDICE
Introduccin..................................................................................................... 3

OBJETIVO GENERAL DE CURSO:.........................................................................4


Temario:............................................................................................................... 5
Unidad 2 Recursividad.......................................................................................... 8
2.1 Definicin....................................................................................................... 8
2.2 Procedimientos recursivos.............................................................................. 9
2.3 Ejemplos de casos recursivos.......................................................................14
Conclusin...................................................................................................... 15
Bibliografa........................................................................................................ 16

Introduccin
La recursividad es una tcnica muy utilizada en programacin. Se suele utilizar para
resolver problemas cuya solucin se puede hallar resolviendo el mismo problema,
pero para un caso de tamao menor.
Los mtodos recursivos se pueden usar en cualquier situacin en la que la solucin
pueda ser expresada como una sucesin de pasos o transformaciones gobernadas
por un conjunto de reglas claramente definidas.
En un algoritmo recursivo podemos distinguir dos partes:
Base o problema trivial que se puede resolver sin clculo
Recursin: Frmula da la solucin del problema en funcin define de un problema del
mismo tipo ms sencillo

OBJETIVO GENERAL DE CURSO:


Identificar, seleccionar y aplicar eficientemente tipos de datos
abstractos, mtodos de ordenamiento y bsqueda para la
optimizacin del rendimiento de soluciones de problemas del
mundo real.

Temario:
UNIDAD 1 Introduccin a las estructuras de
datos.
1.1
1.2
1.3
1.4
1.5

Tipos de datos abstractos (TDA).


Modularidad.
Uso de TDA.
Manejo de memoria esttica.
Manejo de memoria dinmica

UNIDAD 2 Recursividad
2.1 Definicin
2.2 Procedimientos recursivos
2.3 Ejemplos de casos recursivos

UNIDAD 3 Estructuras lineales


3.1Listas
3.1.1Operaciones bsicas con listas.
3.1.2Tipos de listas.
3.13Listas simplemente enlazadas.
3.1.4Listas doblemente enlazadas.
3.1.5Listas circulares.
3.1.6Aplicaciones.
3.2Pilas.
3.2.1Representacin en memoria esttica y dinmica.
3.2.2Operaciones bsicas con pilas.
3.2.3Aplicaciones.
3.2.4Notacin infija y postfija.
3.2.5Recursividad con ayuda de pilas.
3.3Colas.
3.3.1Representacin en memoria esttica y dinmica.
3.3.2Operaciones bsicas con colas.
3.3.3Tipos de colas: Cola simple, Cola circular y Colas dobles.
Hernndez

3.3.4Aplicaciones: Colas de prioridad.

UNIDAD 4 Estructuras no lineales


4.1 Arboles.
4.1.1 Concepto de rbol.
4.1.2 Clasificacin de rboles.
4.1.3 Operaciones bsicas sobre rboles binarios.
4.1.4 Aplicaciones.
4.1.5 Arboles balanceados (AVL).
4.2 Grafos.
4.2.1 Terminologa de grafos.
4.2.2 Operaciones bsicas sobre grafos.

UNIDAD 5 Mtodos de ordenamiento


5.1 Algoritmos de Ordenamiento Internos
5.1.1 Burbuja.
5.1.2 Quicksort.
5.1.3 ShellSort.
5.1.4 Radix
5.2 Algoritmos de ordenamiento Externos
5.2.1 Intercalacin
5.2.2 Mezcla Directa
5.2.3 Mezcla Natural

UNIDAD 6 Mtodos de bsqueda


6.1 Bsqueda secuencial
6.2 Bsqueda binaria
6.3 Bsqueda por funciones de HASH

UNIDAD 7 Anlisis de los algoritmos


7.1 Complejidad en el tiempo.
7.2 Complejidad en el espacio.
7.3 Eficiencia de los algoritmos.

Unida
d2
Recur
sivida
d

Unidad 2 Recursividad
2.1 Definicin
Recursin es una tcnica de programacin en el cual
un mtodo puede llamarse a s mismo. La recursin
es muy interesante y una tcnica efectiva en
programacin ya que puede producir algoritmos
cortos y eficientes.
Algo es recursivo si se define en trminos de s
mismo (cuando para definirse hace mencin a s
mismo).
Si la invocacin de un subprograma (funcin o
subrutina) se produce desde el propio subprograma
se dice que se trata de un subprograma recursivo.
Un mtodo recursivo es un mtodo, directa o
indirectamente, se hace una llamada a s mismo.
La recursin consiste en el uso de mtodos
recursivos.

Se puede usar en toda situacin, en la


cual la solucin puede ser expresada como una secuencia de
movimientos.
1.1 Un ejemplo de la
recursividad

La funcin recursiva se compone de


- Caso base: Una solucin simple para caso particular
(puede haber ms de un caso base). Es una instancia
que se puede resolver sin recursin.
- Caso recursivo: Una solucin que involucra a utilizar la
misma funcin original, con parmetros que se acercan
ms al caso base.
Los pasos que sigue el caso recursivo son:
- El procedimiento se llama a s mismo.

- El problema se resuelve tratando el mismo problema


pero de tamao menor.
- La manera en la cual el tamao del problema disminuye
asegura que el caso base eventualmente se alcanzara.
2.2 Procedimientos recursivos
Un Procedimiento recursivo es aquel que se llama as mismo, solo que no
regresa valor.
Cada mtodo (funcin o procedimiento), tiene ciertas reglas, las cuales se
mencionan a continuacin:
La Funcin Recursiva Debe tener ciertos argumentos llamados valores
base para que esta ya no se refiera a s misma.
El Procedimiento Recursivo es donde Cada vez que la funcin se refiera a
s misma debe estar ms cerca de los valores base.
Propiedades de procedimientos recursivos
Debe existir criterio base para que este se llame a s mismo.
Cada vez que el procedimiento se llame a si mismo debe estar ms
cerca del criterio base.
El Mtodo De Las Tres Preguntas
Se usa para verificar si hay dentro de un programa funciones recursivas, se
debe responder a 3 preguntas.
La
pregunta
caso
base:
Hay salida NO recursiva del procedimiento o funcin y la rutina funciona
correctamente para este caso base?
La
pregunta
llamador
ms
pequeo
Cada llamada al procedimiento o funcin se refiere a un caso ms
pequeo del problema original?
La
pregunta
caso
general
Suponiendo que las llamadas recursivas funcionan correctamente
funciona correctamente todo el procedimiento o funcin?
Escritura de procedimiento y funciones recursivas (pasos a seguir para hacer
programas recursivos).
Recursividad
Se puede utilizar el siguiente mtodo para escribir cualquier rutina recursiva.
Primero obtener una funcin exacta del problema a resolver.
A continuacin, determinar el tamao del problema completo que hay
que resolver, este tamao determina los valores de los parmetros en la
llamada inicial al procedimiento o funcin.

Resolver el caso base en el que el problema puede expresarse no


recursivamente, esto asegura una respuesta afirmativa a la pregunta
base.
Por ltimo, resolver el caso general correctamente en trminos de un
caso ms pequeo del mismo problema, es decir una respuesta
afirmativa a las preguntas 2 y 3 del mtodo de las 3 preguntas.
Un ejemplo de caso recursivo es la sucesin de Fibonacci
Es la siguiente sucesin infinita de nmeros naturales:

Esta sucesin la podemos representar de esta manera en java, aplicando la


recursividad

1.2 Ejemplo de Fibonacci en caso recursivo (cdigo en


java).
Una vez ejecutado nos quedara de esta manera el cdigo, en este programa
necesitamos el Fibonacci de un nmero ingresado desde la lnea de cdigo.

1.3 Fibonacci en java ejecutado


A continuacin presentamos el cdigo:
package fibonaccirecursivo;
public class FibonacciRecursivo {
public static void main(String[] args) {
long num=5;
System.out.println("Serie Fibonacci");
System.out.println("El Fibonacci es "+fibo(num));
}
public static long fibo (long num){
if (num==0 || num==1){
return num;
}
else{
return fibo(num-1)+fibo(num-2);
}
}
}
Otro ejemplo el de las torres de Hani
El de torres de Hani primero presentamos el algoritmo de cmo funciona la
sucesin
Entrada: Tres pilas de nmeros origen, auxiliar, destino, con la pila origen ordenada

Salida: La pila destino


1. si origen

entonces

1. mover el disco 1 de pila origen a la pila destino (insertarlo arriba de la pila


destino)
2. terminar
2. si no
1. hanoi(

,origen,destino, auxiliar)

//mover todas las fichas menos la

ms grande (n) a la varilla auxiliar


3. mover disco n a destino
4. hanoi (auxiliar, origen, destino)

//mover la ficha grande hasta la varilla final


//mover todas las fichas restantes, 1...n1,

encima de la ficha grande (n)


5. terminar

Ahora en java

1.4 Programa en java de torres de Hani


Una vez escrito el programa procedemos a la ejecucin

1.5 Ejecucin de las torres de Hani en java

El cdigo del programa


package hanoi;
import java.util.*;
public class Hanoi {

public void Hanoi(int num, int inicio,int temp, int fin)


{
if(num == 1)
{
System.out.print("Moviendo de la torre 1,ala torre 3");
}
else
{
Hanoi(num-1, inicio, fin,temp);

System.out.println("Moviendose de la torre de inicio"+inicio+"ala torre


final"+fin);
Hanoi(num-1, temp,inicio,fin);
}
}
}
Programa principal

package hanoi;
import java.util.Scanner;
public class Principal extends Hanoi{
public static void main(String[] args) {
int n=0;
Scanner leer = new Scanner(System.in);
Hanoi h = new Hanoi();
System.out.println("Ingrese el numero de aros");
n = leer.nextInt();
h.Hanoi(n, 1,2,3);
}
}

2.3 Ejemplos de casos recursivos


Ejemplo: Factorial
Escribe un programa que calcule el factorial (!) de un entero no negativo.
1!= 1
2!= 2 2+1

3!= 6 3*2*1
4!= 24 4*3*2*1
5!= 120 5*4*3*2*1
Solucion recursiva
Aqu podemos ver la secuencia que toma el factorial.

N!

si N = 0 (base)
(N-1) !* N>0 (recursin)

Un razonamiento recursivo tiene dos partes: la base y la regla recursiva de la


construccin. La base no recursiva y es el punto tanto de partida como de
determinacin de la definicin.
Cmo funciona la recursividad?
Si (n>0) Entonces -------

f(n)=1;

Else
Si(n>0) Entonces---------

N*f(n-1);

F(4)= = 24
F(4)= 4*6
F(3)= 3*2
F(2)= 2*1
F(1)= 1+1
1

Conclusin
En esta unidad aprendimos detalladamente que es la recursividad y su
aplicacin en un programa de java para poder ejecutarlo. Recursin es una
tcnica de programacin en el cual un mtodo puede llamarse a s mismo. La
recursin es muy interesante y una tcnica efectiva en programacin ya que
puede producir algoritmos cortos y eficientes.

Bibliografa
https://es.wikipedia.org/wiki/Sucesi%C3%B3n_de_Fibonacci
https://sites.google.com/site/estdatjiq/home/unidad-ii
http://itpn.mx/recursosisc/3semestre/estructuradedatos/Unidad%20II.pdf
https://es.wikipedia.org/wiki/Torres_de_Han%C3%B3i
http://puntocomnoesunlenguaje.blogspot.mx/2012/04/torres-de-hanoi.html