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
-
- -