SQLでProject Euler − Problem 02

PostgreSQLのgenerate_table?が欲しいなーと思っていましたが、再帰SQLがあれば問題ないかも!
ただネスト数が多すぎるとどうなるかがまだ見えません。

■ 新バージョン

/**
【問題】
フィボナッチ数列の項は前の2つの項の和である。
 最初の2項を 1, 2 とすれば、最初の10項は以下の通りである。
 「1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...」
数列の項の値が400万を超えない範囲で、偶数値の項の総和を求めよ。
**/

WITH Temp (a,b)
AS
(
	(SELECT 0,1)
UNION ALL
	SELECT b,a+b FROM Temp WHERE a < 4000000
)
SELECT SUM(a)
FROM Temp t
WHERE t.a % 2 = 0
OPTION (MAXRECURSION 0)


■ 旧バージョン

/**
【問題】
フィボナッチ数列の項は前の2つの項の和である。
 最初の2項を 1, 2 とすれば、最初の10項は以下の通りである。
 「1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...」
数列の項の値が400万を超えない範囲で、偶数値の項の総和を求めよ。
**/

CREATE TABLE #temp (fib int NOT NULL)

DECLARE @fiba int
DECLARE @fibb int
DECLARE @fibtmp int
SET @fiba = 0
SET @fibb = 1
SET @fibtmp = 0

-- generate table fibonacci sequence
WHILE @fibb <= 4000000
BEGIN
    SET @fibtmp = @fiba + @fibb
    SET @fiba = @fibb
    SET @fibb = @fibtmp
    INSERT INTO #temp(fib) VALUES(@fiba)
--    SELECT @fiba,@fibb
END

-- calculation
SELECT sum(fib) FROM #temp WHERE fib % 2 = 0

DROP TABLE #temp
    • -