Fibonacci Rides Again… and Again

Suppose my previous Fibonacci code should be a function. Here it is:

CREATE OR REPLACE FUNCTION fibonacci(intRETURNS SETOF int AS
$BODY$
WITH RECURSIVE t(a, b) AS (
    VALUES (11)
UNION ALL
    SELECT b, a + b FROM t
)
SELECT a FROM t  LIMIT $1;
$BODY$
IMMUTABLE
STRICT
LANGUAGE SQL;

Take care!

Advertisements

Fibonacci Rides Again

Not so long ago I wrote about implementing GCD function in PostgreSQL using CTE.

Here I will show how Fibonacci Numbers may be obtained using the same technique.

So to have first 16 members of this sequence we should execute something like this:

WITH RECURSIVE t(a, b) AS (
    VALUES (11)
UNION ALL
    SELECT b, a + b FROM t
)
SELECT a FROM t  LIMIT 16;

Suppose we should add this code to Wiki Library Snippets. Any objections? 😉

UPD. Some others unnatural ways to calculate Fibonacci numbers may be found in Russian.