Requisito previo : introducción
a PL/SQL En el código PL/SQL, los grupos de comandos se organizan dentro de un bloque. Un grupo de bloques relacionado con declaraciones o sentencias. En declare part, declaramos variables y entre start y end part, realizamos las operaciones.
Dado un entero positivo n y la tarea es encontrar la suma del primer n número natural.
Ejemplos:
Input: n = 3 Output: 10 Input: n = 2 Output: 4
El enfoque es tomar dígitos de 1 a n y sumar como se hace a continuación:
Sum of first natural number: 1 Sum of first and second natural number: 1 + 2 = 3 Sum of first, second and third natural number = 1 + 2 + 3 = 6
A continuación se muestra la implementación requerida:
--declaration section DECLARE x NUMBER; n NUMBER; i NUMBER; --function for finding sum FUNCTION Findmax(n IN NUMBER) RETURN NUMBER IS sums NUMBER := 0; BEGIN --for loop for n times iteration FOR i IN 1..n LOOP sums := sums + i*(i+1)/2; END LOOP; RETURN sums; END; BEGIN --driver code n := 4; x := findmax(n); dbms_output.Put_line('Sum: ' || x); END; --end of Program
Producción:
Sum: 20
Complejidad del tiempo = O(n)
Una solución eficiente es utilizar la fórmula directa n(n+1)(n+2)/6
Matemáticamente, necesitamos encontrar, Σ ((i * (i + 1))/2), donde 1 <= i <= n
Entonces, resolvamos esta suma,
Sum = Σ ((i * (i + 1))/2), where 1 <= i <= n = (1/2) * Σ (i * (i + 1)) = (1/2) * Σ (i2 + i) = (1/2) * (Σ i2 + Σ i) We know Σ i2 = n * (n + 1) * (2*n + 1) / 6 and Σ i = n * ( n + 1) / 2. Substituting the value, we get, Sum = (1/2) * ((n * (n + 1) * (2*n + 1) / 6) + (n * ( n + 1) / 2)) = n * (n + 1)/2 [(2n + 1)/6 + 1/2] = n * (n + 1) * (n + 2) / 6
A continuación se muestra la implementación requerida:
--declaration section DECLARE x NUMBER; n NUMBER; --utility function FUNCTION Findmax(n IN NUMBER) RETURN NUMBER IS z NUMBER; BEGIN -- formula for finding sum z := (n * (n + 1) * (n + 2)) / 6; RETURN z; END; BEGIN n := 4; x := findmax(n); dbms_output.Put_line(' Sum: ' || x); END; --end of program
Producción:
Sum: 20
Complejidad del tiempo = O(1)