ITPub博客

首页 > 数据库 > Oracle > ORACLE构造斐波那契数列

ORACLE构造斐波那契数列

Oracle 作者:syjr 时间:2013-12-11 14:41:00 0 删除 编辑

  斐波那契数列,又称黄金分割数列,指的是这样一个数列:1,1,2,3,5,8,13,21,…… 从第三项开始,每一项都等于前两项之和。

   在oracle中,使用传统的connect by方法做不出来,但是用oracle10g以上所支持的model可以轻松构造,代码如下:

     SELECT rn, n

       FROM (SELECT ROWNUM rn FROM dual CONNECT BY ROWNUM <= 10)

      MODEL RETURN UPDATED ROWS

  DIMENSION BY (rn)

   MEASURES (1 n)

      RULES (

             n[any] order by rn asc = DECODE(cv(rn), 1, 1, 2, 1, n[cv()-2]+n[cv()-1])

            );

    当然,Oracle11g之后的版本,也可以使用WITH递归的方法构造,代码如下:

    WITH t(n, last_n, cnt) AS (SELECT 1, 0, 1 FROM DUAL

                               UNION ALL

                               SELECT t.n+t.last_n, t.n, t.cnt+1

                                 FROM t

                                WHERE t.cnt < 10

                              )

        SELECT n FROM t;

    实际上,斐波那契数列可以使用通项公式表示,如下:

    

    所以根据该通项公式,还是可以直接使用connect by计算出来,代码如下:

    SELECT LEVEL,

           1/power(5, 0.5)*(power((1+ power(5, 0.5))/2, LEVEL) - power((1- power(5, 0.5))/2, LEVEL))

      FROM dual

   CONNECT BY LEVEL <= 10;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22528558/viewspace-1109200/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2009-09-13