ESTRUCTURAS DE DATOS




                               UNIDAD 4 RECURSIVIDAD
Un proceso es recursivo, si está definido total o parcialmente en términos de sí mismo. La
utilización de la recursividad es apropiada cuando el problema a resolver o los datos a tratar
han sido definidos de forma recursiva, aunque esto no garantiza que esta sea la mejor forma
de resolverlo.

La recursión es una alternativa a la iteración. Un proceso iterativo es aquel que requiere de la
expresión explicita de cierta acción.

De esta forma para calcular por ejemplo, el factorial de un número, se puede utilizar un
proceso iterativo o uno recursivo.

                              PRO CE DIM IE NTO S RE CU RSIVO S



Los tipos de procesos recursivos son los siguientes:

   a) Recursividad Simple o directa: Es aquella en cuya definición solo aparece una llamada
      recursiva. Se puede transformar con facilidad en algoritmo iterativo.

   b) Recursividad Múltiple: Se da cuando hay más de una llamada dentro del cuerpo de una
      función o método, resulta un poco más difícil transformar a un algoritmo en iterativo.
      Por ejemplo:

                int cuenta(int m)

               {

                   if (m==1) return 1;

                     return (cuenta(m-10)+cuenta(m-2));

               }

   c) Recursividad Anidada: Es aquella en donde en alguno de los argumentos de la llamada
      recursiva hay una nueva llamada así misma. Por ejemplo :

             public int ack (int n, int m)
             {
                     if(n==0) return(m+1)
                        else if(m==0)return(ack( n-1 ),1);
                          return(ack(n-1, ack(n,m-1)));
             }
   d) Recursividad Cruzada o indirecta: Son algoritmos donde una función o método
      provoca una llamada así mismo de forma indirecta a través de otras funciones o
      métodos. Por ejemplo:
             int par (int nump)
             {
                     if(nump==0) return 1;
                                                                                                   1
ESTRUCTURAS DE DATOS



                                 return (impar(nump-1));
                }



                int impar (int numi)
                {
                       if(numi==0)return 0;
                                return(par(numi-1));
                }

                                  ME CANICA DE RE CU RSIO N

Un algoritmo recursivo se debe distinguir por dos elementos:

    a) El caso base, trivial o de fin de recursión: Es un caso donde el problema puede
       resolverse sin tener que hacer uso de una nueva llamada así mismo. Evita la
       continuación indefinida de las partes recursivas.

    b) El caso general: Es el que relaciona el resultado del algoritmo con resultados de casos
       más simples. Se hacen nuevas llamadas a la función o método pero están más
       próximas al caso base.

Por ejemplo la definición de la factorial es recursiva, y se define así:

                      El factorial de 4 es: 4*3*2*1

                      El factorial de 0 es: 1

Matemáticamente tenemos:

                      0!=1;

                      1!=1;

                      2!=2*1;

                      3!=3*2*1;

                      4!=4*3*2*1;

Por lo que se tiene que:

                      0!=1;

                      1!=1*0!;

                      2!=2*1!;

                      3!=3*2!;

                      4!=4*3!;

El caso base es: Si N=0, N!=1.
                                                                                                 2
ESTRUCTURAS DE DATOS



El caso general es: Si N>0, N!=N*(N-1)!

La mecánica de la recursividad está basada en una pila. Cuando un método recursivo se está
ejecutando se crea en la memoria de la computadora una pila en donde se almacenan los
valores de los parámetros y de las variables locales del método, si este método retorna un
resultado este también se guarda en la pila.

Para cada llamada del método se almacenan en la pila los nuevos valores creándose un nuevo
¨registro de activación¨. De tal forma que la pila de recursión está formada por estos registros
de activación.

El código o método recursivo para el factorial es:

public int fact(int n)

{       if (n==0) return 1;

            else return n*fact(n-1);

}

            NIVEL DE RECURSION          PROCESO DE IDA         P R O C E S O D E V U EL T A
                     0                     FACT(4)                          24
                     1                    4*FACT(3)                         4*6
                     2                    3*FACT(2)                         3*2
                     3                    2*FACT(1)                         2*1
                     4                    1*FACT(0)                         1*1
                                           FACT(0)                           1




                                RECURSIVIDAD EN EL DISEÑO

En el diseño un algoritmo recursivo se debe de tener en cuenta lo siguiente:

a)   La recursividad puede ser de cualquier tipo simple, múltiple, anidada o cruzada.

b)   El instrumento necesario para expresar la recursividad es el método o función.

c)   Un método recursivo debe de disponer de una o varias instrucciones selectivas donde se
     establezca la condición o condiciones de salida, que representa el caso base.

d)   Cada llamada recursiva se debe aproximar al cumplimiento de las condiciones de salida,
     cada llamada recursiva representa el caso general.

e)   Cada vez que se llama al método los valores de los parámetros y variables locales serán
     almacenados en una pila.

f)   Durante las ejecuciones, parámetros y variables tomaran nuevos valores con los que
     trabajará el método.

g)   Cuando termina de ejecutarse el método, se retorna al nivel anterior recuperándose de la
     pila los valores tanto de parámetros como de variables locales continuando la ejecución
     con la instrucción siguiente a la llamada recursiva.
                                                                                               3
ESTRUCTURAS DE DATOS



                    VENTAJAS Y DESVENTAJAS DE LA RECURSIVIDAD

   1. Da solución a problemas de una manera natural, sencilla, comprensible y elegante.

   2. Presenta una facilidad para comprobar y verificar que la solución es correcta.

   3. En general las soluciones recursivas son más ineficientes en tiempo y en espacio que
      las versiones iterativas, esto es debido a las llamadas continuas a métodos, a la
      creación de variables dinámicas en la pila, y a la duplicación de variables por lo que la
      complejidad de los algoritmos recursivos tiende a ser muy alta.




                                                                                                  4

Más contenido relacionado

PPTX
Segmentación Memoria Virtual
DOCX
Algoritmos de busqueda - hash truncamiento
PDF
Metodo burbuja
PDF
Metodo de busqueda
PPTX
Ordenamiento burbuja
PPTX
Algoritmos intercalación
PPTX
Métodos de ordenación externa
PPTX
Estructura de Datos - Unidad 6 Metodos de busqueda
Segmentación Memoria Virtual
Algoritmos de busqueda - hash truncamiento
Metodo burbuja
Metodo de busqueda
Ordenamiento burbuja
Algoritmos intercalación
Métodos de ordenación externa
Estructura de Datos - Unidad 6 Metodos de busqueda

La actualidad más candente (20)

PPTX
Presentación1
PPTX
3. algoritmos de ordenamiento interno
PPTX
4. algoritmo de ordenamiento externo
PPTX
Estructura de datos - Unidad 1: Introducción a las estructuras de datos
DOCX
Listas como estructura de datos..
DOCX
Recursividad
PPT
Paginacin y-segmentacion combinadas
PDF
Árboles binarios, ABB y AVL
PPTX
Segmentacion de memoria
PPTX
PAGINACION Y SEGMENTACION DE MEMORIA
PDF
Algoritmos de Ordenamiento externo
PDF
Presentación inserción directa y binaria
PPT
Metodos Busqueda Interna
DOC
Metodo quicksort
PPTX
Arboles - estructura de datos
PDF
Algoritmo de ordenamiento: Heap Sort
PPT
Estructura datos pilas y colas
PPTX
Estructura de Datos - Unidad II Recursividad
DOCX
Recursividad
Presentación1
3. algoritmos de ordenamiento interno
4. algoritmo de ordenamiento externo
Estructura de datos - Unidad 1: Introducción a las estructuras de datos
Listas como estructura de datos..
Recursividad
Paginacin y-segmentacion combinadas
Árboles binarios, ABB y AVL
Segmentacion de memoria
PAGINACION Y SEGMENTACION DE MEMORIA
Algoritmos de Ordenamiento externo
Presentación inserción directa y binaria
Metodos Busqueda Interna
Metodo quicksort
Arboles - estructura de datos
Algoritmo de ordenamiento: Heap Sort
Estructura datos pilas y colas
Estructura de Datos - Unidad II Recursividad
Recursividad
Publicidad

Similar a Unidad 4 est. dat. recursividad (20)

PPT
Presentación de Recursividad para Estructuras de datos.ppt
PDF
Recursividad.pdf
PPT
Recursividad-Analisis de Algoritmos .ppt
PPTX
Recursividad
PPTX
Funciones recursivas
PPTX
2. Recursividad
DOCX
Informe Técnico - Recursividad Unidad 2 (Rubi Veronica)
PPT
Tecnicas de Recursividad_Programacion.ppt
PDF
Programación Orientada a Objetos parte 3
PPTX
Recursividad 100329105433-phpapp01
DOCX
Recursividad2019
PPT
Recursividad
PPT
Recursividad
PPTX
recursividad.pptx
PPTX
recursividad EN PROGRAMACION ORIENTADA .pptx
PPT
Unidad 2 p1
PPT
Presentación de Recursividad para Estructuras de datos.ppt
Recursividad.pdf
Recursividad-Analisis de Algoritmos .ppt
Recursividad
Funciones recursivas
2. Recursividad
Informe Técnico - Recursividad Unidad 2 (Rubi Veronica)
Tecnicas de Recursividad_Programacion.ppt
Programación Orientada a Objetos parte 3
Recursividad 100329105433-phpapp01
Recursividad2019
Recursividad
Recursividad
recursividad.pptx
recursividad EN PROGRAMACION ORIENTADA .pptx
Unidad 2 p1
Publicidad

Más de rehoscript (20)

PDF
Practicas oracle10g
PDF
Virtual dev-day-java7-keynote-1641807
DOC
Unidad 8 metodos_de_busqueda
DOC
Unidad 6 ordenacion_interna
DOC
Unidad 5 est. dat estruc. no lineal
DOC
Unidad 3 estructuras lineales estaticas y dinamicas
DOC
Unidad 2 Manejo de memoria
DOCX
Unidad 7 ordenacion_externa
DOC
Analisis de algoritmos
PPTX
Lenguajes Decidibles
PPT
Claselexico
PPT
Programación
PPT
Reseña y ensayo
PPT
Protocolo de investigacion
PPTX
Tipos de entrevista
PPT
Investigacion documental
PPSX
Maquinas Virtuales
PPTX
Arquitectura P2P
PPTX
Arquitectura dirigida a eventos
PPTX
Arquitecturas de pizarra o repositório
Practicas oracle10g
Virtual dev-day-java7-keynote-1641807
Unidad 8 metodos_de_busqueda
Unidad 6 ordenacion_interna
Unidad 5 est. dat estruc. no lineal
Unidad 3 estructuras lineales estaticas y dinamicas
Unidad 2 Manejo de memoria
Unidad 7 ordenacion_externa
Analisis de algoritmos
Lenguajes Decidibles
Claselexico
Programación
Reseña y ensayo
Protocolo de investigacion
Tipos de entrevista
Investigacion documental
Maquinas Virtuales
Arquitectura P2P
Arquitectura dirigida a eventos
Arquitecturas de pizarra o repositório

Unidad 4 est. dat. recursividad

  • 1. ESTRUCTURAS DE DATOS UNIDAD 4 RECURSIVIDAD Un proceso es recursivo, si está definido total o parcialmente en términos de sí mismo. La utilización de la recursividad es apropiada cuando el problema a resolver o los datos a tratar han sido definidos de forma recursiva, aunque esto no garantiza que esta sea la mejor forma de resolverlo. La recursión es una alternativa a la iteración. Un proceso iterativo es aquel que requiere de la expresión explicita de cierta acción. De esta forma para calcular por ejemplo, el factorial de un número, se puede utilizar un proceso iterativo o uno recursivo. PRO CE DIM IE NTO S RE CU RSIVO S Los tipos de procesos recursivos son los siguientes: a) Recursividad Simple o directa: Es aquella en cuya definición solo aparece una llamada recursiva. Se puede transformar con facilidad en algoritmo iterativo. b) Recursividad Múltiple: Se da cuando hay más de una llamada dentro del cuerpo de una función o método, resulta un poco más difícil transformar a un algoritmo en iterativo. Por ejemplo: int cuenta(int m) { if (m==1) return 1; return (cuenta(m-10)+cuenta(m-2)); } c) Recursividad Anidada: Es aquella en donde en alguno de los argumentos de la llamada recursiva hay una nueva llamada así misma. Por ejemplo : public int ack (int n, int m) { if(n==0) return(m+1) else if(m==0)return(ack( n-1 ),1); return(ack(n-1, ack(n,m-1))); } d) Recursividad Cruzada o indirecta: Son algoritmos donde una función o método provoca una llamada así mismo de forma indirecta a través de otras funciones o métodos. Por ejemplo: int par (int nump) { if(nump==0) return 1; 1
  • 2. ESTRUCTURAS DE DATOS return (impar(nump-1)); } int impar (int numi) { if(numi==0)return 0; return(par(numi-1)); } ME CANICA DE RE CU RSIO N Un algoritmo recursivo se debe distinguir por dos elementos: a) El caso base, trivial o de fin de recursión: Es un caso donde el problema puede resolverse sin tener que hacer uso de una nueva llamada así mismo. Evita la continuación indefinida de las partes recursivas. b) El caso general: Es el que relaciona el resultado del algoritmo con resultados de casos más simples. Se hacen nuevas llamadas a la función o método pero están más próximas al caso base. Por ejemplo la definición de la factorial es recursiva, y se define así: El factorial de 4 es: 4*3*2*1 El factorial de 0 es: 1 Matemáticamente tenemos: 0!=1; 1!=1; 2!=2*1; 3!=3*2*1; 4!=4*3*2*1; Por lo que se tiene que: 0!=1; 1!=1*0!; 2!=2*1!; 3!=3*2!; 4!=4*3!; El caso base es: Si N=0, N!=1. 2
  • 3. ESTRUCTURAS DE DATOS El caso general es: Si N>0, N!=N*(N-1)! La mecánica de la recursividad está basada en una pila. Cuando un método recursivo se está ejecutando se crea en la memoria de la computadora una pila en donde se almacenan los valores de los parámetros y de las variables locales del método, si este método retorna un resultado este también se guarda en la pila. Para cada llamada del método se almacenan en la pila los nuevos valores creándose un nuevo ¨registro de activación¨. De tal forma que la pila de recursión está formada por estos registros de activación. El código o método recursivo para el factorial es: public int fact(int n) { if (n==0) return 1; else return n*fact(n-1); } NIVEL DE RECURSION PROCESO DE IDA P R O C E S O D E V U EL T A 0 FACT(4) 24 1 4*FACT(3) 4*6 2 3*FACT(2) 3*2 3 2*FACT(1) 2*1 4 1*FACT(0) 1*1 FACT(0) 1 RECURSIVIDAD EN EL DISEÑO En el diseño un algoritmo recursivo se debe de tener en cuenta lo siguiente: a) La recursividad puede ser de cualquier tipo simple, múltiple, anidada o cruzada. b) El instrumento necesario para expresar la recursividad es el método o función. c) Un método recursivo debe de disponer de una o varias instrucciones selectivas donde se establezca la condición o condiciones de salida, que representa el caso base. d) Cada llamada recursiva se debe aproximar al cumplimiento de las condiciones de salida, cada llamada recursiva representa el caso general. e) Cada vez que se llama al método los valores de los parámetros y variables locales serán almacenados en una pila. f) Durante las ejecuciones, parámetros y variables tomaran nuevos valores con los que trabajará el método. g) Cuando termina de ejecutarse el método, se retorna al nivel anterior recuperándose de la pila los valores tanto de parámetros como de variables locales continuando la ejecución con la instrucción siguiente a la llamada recursiva. 3
  • 4. ESTRUCTURAS DE DATOS VENTAJAS Y DESVENTAJAS DE LA RECURSIVIDAD 1. Da solución a problemas de una manera natural, sencilla, comprensible y elegante. 2. Presenta una facilidad para comprobar y verificar que la solución es correcta. 3. En general las soluciones recursivas son más ineficientes en tiempo y en espacio que las versiones iterativas, esto es debido a las llamadas continuas a métodos, a la creación de variables dinámicas en la pila, y a la duplicación de variables por lo que la complejidad de los algoritmos recursivos tiende a ser muy alta. 4