Question: How to Generate Fibonacci Series for the First 1000 Values?
Answer: In this blog post we will try to find an answer to Fibonacci in till 1000th value.
Here is the script which will generate first 1001 value of the Fibonacci series.
SELECT 0 AS Fibonacci UNION ALL SELECT FLOOR(POWER(( 1 + SQRT(5)) / 2.0, number) / SQRT(5) + 0.5) FROM master..spt_values WHERE TYPE = 'p' AND number < 1000
You can always write Fibonacci series by writing cursor where you add previous values to the next value, however, that solution is very expensive and takes pretty long time to execute. Using the script which I have demonstrated, you will get the results pretty quickly.
If you are going to an interview, you can for sure write a cursor where you add values but writing script which is the most efficient will bring you additional brownie points.
Let me know if you prefer any other way to write this script. Please post your solution in the comments section. I will publish it with due credit.
Reference: Pinal Dave (https://blog.sqlauthority.com)
2 Comments. Leave new
with cte as (
select convert(float, 1) as PreviousValue, convert(float, 1) as Value
union all
select Value as PreviousValue, Value + PreviousValue as Value from cte)
select * from cte
option (maxrecusion 1000)
SELECT 0 AS Fibonacci
UNION ALL
SELECT
FLOOR(POWER(( 1.0 + SQRT(5.0)) / 2.0, number) / SQRT(5.0) + 0.5)
FROM (
select
ROW_NUMBER() over(order by (select 1)) as [number] from sys.all_columns
) c
WHERE c.number < 1475
(1476 results in arithmatic overflow)
spt_values is a poorly document sort of lookup table inhereted from Sybase.
Roow_Number is handy for numbering records, sys.allcoumns will allways exist in mssql and holds several thousends of records…
NB (SELECT 1) is a trick to fool the window function which does not accept integer indices…