Inicio > Metodología > Consideraciones generales sobre recursividad

Consideraciones generales sobre recursividad

La utilización de técnicas de recursividad dentro de la programación en cualquier tipo de lenguaje (en este caso PL/SQL) dota al código de un gran nivel de ‘factores de calidad’ (calidad + simplicidad + potenciabilidad). Características que conjuntamente con las de elegancia y sencillez dotan a esta técnica como de uso muy recomendable.

Unos de los casos más representativos de la aplicación de esta técnica, por su propia definición, es la del cálculo matemático del ‘factorial’ de un número:

n! = n * (n-1) * (n-2) * (n-3) * … * 1

Indicar como excepción a la recursividad tradicional, situaciones en las que la información susceptible de tratamiento está ubicada en la Base de Datos en un modelo de ‘Estructura Jerárquica‘. Esta puede ser tratada por ‘SQL‘ mediante consultas ‘jerárquicamente relacionales‘ (‘CONNECT BY PRIOR …‘). A esta excepción se le denomina ‘recursividad por estructura en relación reflexiva‘  (ver más detalladamente a continuación).

No obstante, como toda buena técnica se han de considerar las siguientes condiciones o condicionantes sobre su uso:

1.- Nivel de Recursividad

El nivel de recursividad se expresa en el número de llamadas anidadas -‘recursivamente’- a un mismo grupo de código (‘Funcion’, ‘Procedimiento’ o Agrupación de código en agrupaciones de Funciones i/o Procedimientos).

Se ha de contar con el factor de una posible limitación, que puede tener el lenguaje, sobre el ‘Límite máximo de nivel de recursividad‘.

Si no existiese este límite o no se apreciase, podrán existir otras implicaciones indirectas que lo pueden limitar y que influyen directamente sobre el uso de memoria de proceso (que se especifica en el apartado 3).

2.- Volumen Transaccional

Cuando en el uso de técnicas de recursividad existen Operaciones Transaccionales (‘INSERT’, ‘DELETE’, ‘UPDATE’) –operaciones de DML-, se ha de considerar el volumen de información sometida en esas transacciones.

Es decir, el volumen transaccional se debe controlar específicamente, ya que en las técnicas de uso de recursividad no es trivial el calcular la cantidad de información sujeta a este tipo de operaciones.

Por lo tanto, hay que analizar y saber donde delimitar el proceso transaccional y cerrarlo con una operación de validación o anulación (‘COMMIT’ o ‘ROLLBACK’).

3.- Uso de Memoria del Proceso

Las llamadas recursivas a un ‘bloque de código’ provocan que, en tiempo de ejecución, se establezca una “estructura de pila” donde se guarda información sobre las variables, cursores (cuidado con número máximo de cursores abiertos -limitados a nivel de Instancia de BBDD-) y demás objetos de memoria.

Toda esta estructura ubicada en memoria del proceso va aumentando en función del nivel de recursividad (disminuyéndose en la liberación por finalización de procesos ‘hijo’ e incrementándose en sucesivas llamadas a la estructura jerárquica según los niveles de recursividad –‘hijo’, ‘nieto’, etc.-).

Es por ello que se considera como factor de análisis, sobre el uso de recursos de memoria del sistema y sus implicaciones en el conjunto del Sistema de Información (memoria asignada a la “PGA“).

Pueden existir otras casuísticas más a considerar, pero estas son las más habituales y condicionantes.

En todo caso, se recomienda el control de errores mediante la definición de  excepciones (‘EXCEPTION’) dentro del código recursivo.

Resumiendo :

Se recomienda el uso de código con llamadas recursivas por el nivel de calidad que alcanza esta metodología de programación.

No obstante, y dados los condicionantes de su aplicación así como las implicaciones de consumo en los Sistemas de Información en Producción, es recomendable valorar si utilizar esta técnica o el aplicar ‘soluciones de iteratividad‘. No olvidemos que cualquier programa recursivo se puede convertir en iterativo (consumiendo menos recursos), pero a costa de tener un código más complejo.

Para conseguir lo mejor de “los dos mundos” hay quien defiende esta máxima: “Diseña en recursivo, programa en iterativo”.

Referencias :

Categorías:Metodología Etiquetas: , , ,
  1. Aún no hay comentarios.
  1. noviembre 28, 2010 en 15:18

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: