ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 用SQL输出斐波那契数列!

用SQL输出斐波那契数列!

原创 Linux操作系统 作者:0x0x0x 时间:2012-06-26 14:13:30 0 删除 编辑
原帖请见:http://www.itpub.net/thread-1622350-1-1.html

方法一:用通项(最愚蠢但最数学)
SQL> set timing on
SQL> SELECT ROUND(1/power(5,0.5)*(power(((1+power(5,0.5))/2),rownum)-power(((1-power(5,0.5))/2),rownum)),0) fbn
  2  FROM dual
  3    CONNECT BY rownum<=10
  4  /
       FBN
----------
         1
         1
         2
         3
         5
         8
        13
        21
        34
        55
已选择10行。
已用时间:  00: 00: 00.00
SQL>
方法二:用with递归实现(最巧妙最精致)
SQL> WITH t(n,last_n,cnt) AS
  2    ( SELECT 1,0,1 FROM DUAL
  3    UNION ALL
  4    SELECT t.n+t.last_n, t.n, t.cnt+1 FROM t WHERE t.cnt<10
  5    )
  6  SELECT n FROM T
  7  /
         N
----------
         1
         1
         2
         3
         5
         8
        13
        21
        34
        55
已选择10行。
已用时间:  00: 00: 00.03
SQL>
方法三:用model递归查询(最时尚最醉人)
SQL> SELECT rn,
  2    n
  3  FROM
  4    (SELECT ROWNUM rn FROM DUAL CONNECT BY ROWNUM<=10
  5    ) MODEL RETURN UPDATED ROWS DIMENSION BY (rn) MEASURES (1 n) RULES ( n[ANY]
  6  ORDER BY rn=DECODE(cv(rn),1,1,2,1, n[cv()-2]+n[cv()-1]))
  7  /
        RN          N
---------- ----------
         1          1
         2          1
         3          2
         4          3
         5          5
         6          8
         7         13
         8         21
         9         34
        10         55
已选择10行。
已用时间:  00: 00: 00.02
SQL>
 
简评:oracle提供的model功能真的好强大,可以实现好多复杂的功能!with递归是比较好理解,以后可以多使用!通项法对数学理论基础要求比较高!

 

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

请登录后发表评论 登录
全部评论

注册时间:2012-06-26

  • 博文量
    35
  • 访问量
    92199