oracle斐波那契数列累加,ORACLE构造斐波那契数列

斐波那契数列,又称黄金分割数列,指的是这样一个数列: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;

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

bb

所以根据该通项公式,还是可以直接使用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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值