Encontrar la suma de los primeros n números naturales en PL/SQL

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)

Publicación traducida automáticamente

Artículo escrito por vt_m y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *