https://onecompiler.com/postgresql/
Fakultät
Rekursive definition
Explizite definition
Pseudocode
def factorial(n):
result = 1
for i from 1 to n inclusive:
result = result * i
return result
PL/pgSQL
UDF Definieren
CREATE [ OR REPLACE ] FUNCTION fun(param INT, ...) RETURNS INT AS
$$ DECLARE
x INT := ...;
BEGIN
-- ...
END $$ LANGUAGE plpgsql;Loop
FOR i IN 1..10 LOOP
-- ...
END LOOP;Return value
RETURN ...;Raise exception
RAISE "message";Conditional expressions
IF ... THEN
-- ...
END IF;Call function
SELECT fun(n);
UDF
CREATE OR REPLACE FUNCTION fac(n INT) RETURNS INT AS
$$ DECLARE
result INT := 1;
BEGIN
IF n < 0 THEN
RAISE 'n must be a non-negative integer.';
END IF;
FOR i in 1..n LOOP
result = result * i;
END LOOP;
RETURN result;
END $$ LANGUAGE plpgsql;Größtmögliche Zahl
DO $$ BEGIN
FOR i in 1..100 LOOP
RAISE NOTICE '%', i;
PERFORM fac(i);
END LOOP;
END $$Die größtmögliche Zahl n ist 12.
Warum?
Der INT-Typ hat 4 byte = 32 bit. Die Grenzen sind also wie folgt:
Wie kommt man auf die Grenzen?
Die einzelnen bits haben einen Wert von bis . Wegen 2er-Komplement ist der größte Wert negativ (). Der größte positive Wert ist also .
Die Fakultäten von 0 bis 13 sind:
| n | n! |
|---|---|
| 0 | 1 |
| 1 | 1 |
| 2 | 2 |
| 3 | 6 |
| 4 | 24 |
| 5 | 120 |
| 6 | 720 |
| 7 | 5 040 |
| 8 | 40 320 |
| 9 | 362 880 |
| 10 | 3 628 800 |
| 11 | 39 916 800 |
| 12 | 479 001 600 |
| 13 | 6 227 020 800 |
Da ist 12 die größte Zahl, die keinen Überlauf erzeugt.