Cómo utilizar la recursión en T-SQL para calcular el factorial - TechRepublic

La recursión es una de las construcciones de programación más elegantes, en mi opinión. La he utilizado en docenas de situaciones y en varios lenguajes de programación. El concepto básico de la recursión es sencillo: un fragmento de código llamándose a sí mismo hasta que se alcanza una condición de límite. Te mostraré cómo usar la recursión en T-SQL, utilizando uno de los ejemplos clásicos de recursión: el cálculo del factorial.

Un factorial es el producto de un número por todos los números menores hasta llegar a dos. Por ejemplo, factorial(10) es igual a 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2. (Podrías añadir * 1, pero ¿por qué molestarse?)

El siguiente script implementa el algoritmo del factorial:

CREATE PROCEDURE [dbo].[Factorial_ap]
(
    @Numero Integer,
    @RetVal Integer OUTPUT
)
AS
    DECLARE @In Integer
    DECLARE @Out Integer

    IF @Numero != 1
    BEGIN
        SELECT @In = @Numero - 1
        EXEC Factorial_ap @In, @Out OUTPUT
        SELECT @RetVal = @Numero * @Out
    END
    ELSE
    BEGIN
        SELECT @RetVal = 1
    END

RETURN
GO

Suponiendo que quieres calcular factorial(n), el procedimiento se llamará a sí mismo (n-2) veces. SQL Server permite hasta 32 llamadas recursivas, pero en el caso de factorial(13), se producirá un desbordamiento aritmético. Si esperas realizar cálculos de factoriales de números grandes, debes declarar la variable como BigInt en lugar de Integer. Esto te permitirá calcular factorial(20), que es igual a 2,432,902,008,176,640,000. Los resultados aumentan de tamaño tan rápidamente que factorial(21) supera esta implementación.

Aunque el algoritmo del factorial es bonito, es poco probable que lo uses mucho en tu programación diaria. Sin embargo, ilustra de manera concisa el principio de la recursión.

Aplicaciones prácticas de la recursión

Existen muchas situaciones prácticas en las que la recursión puede ser una técnica valiosa, entre ellas se encuentra el clásico problema de programación llamado Boletín de Materiales. Este problema tiene al menos dos aplicaciones diferentes:

Cómo crear un formulario de entrada de datos en Microsoft Access
  • Dado la demanda de una instancia de un objeto, generar el Boletín de Materiales necesario para construirlo.
  • Dado los niveles de inventario específicos de los objetos constituyentes que conforman un objeto, ¿cuántos objetos de este tipo podemos construir?

Supongamos que tenemos un objeto O, que consiste en cuatro objetos X, tres objetos Y y siete objetos Z. Por lo tanto, para construir un solo objeto O es obvio que requerimos cuatro objetos X, tres objetos Y y siete objetos Z. Sin embargo, supongamos que los objetos Y y Z requieren ambos una cierta cantidad de un objeto Q (por ejemplo, tornillos de un determinado grosor, patrón de rosca y patrón de cabeza). Entonces debemos visitar los objetos Y y Z, determinar la cantidad de Q que requieren y verificar si tenemos esa suma en stock. Si no la tenemos, no podemos construir el objeto O.

SQL Server 2000 no facilita la resolución de este problema a menos que conozcas de antemano el nivel de recursión. Sin embargo, la versión beta del SQL 2005 sí da un gran paso para solucionar este problema. El gurú de SQL, Joe Celko, ofrece una solución bastante ingeniosa a este problema, que implica rastrear los niveles en el momento de la inserción de las filas. Su solución funciona bien, pero requiere disparadores o mecanismos equivalentes que actualicen las columnas de nivel de profundidad con cada inserción, actualización o eliminación. Puedes ver un ejemplo de su método implementado en Access. Fácilmente puedes adaptar esta solución a SQL Server y luego modificarla según tus necesidades.

Pronto volveré sobre este tema para mostrar los avances drámaticos introducidos en SQL Server 2005. No te lo pierdas.

En Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre Gestión de datos, allí encontraras muchos artículos similares a Cómo utilizar la recursión en T-SQL para calcular el factorial - TechRepublic , tenemos lo ultimo en tecnología 2023.

Artículos Relacionados

Subir

Utilizamos cookies para mejorar su experiencia de navegación, mostrarle anuncios o contenidos personalizados y analizar nuestro tráfico. Al hacer clic en “Aceptar todo” usted da su consentimiento a nuestro uso de las cookies.