-- 斐波纳契数列
-- 这里有一组数:1、1、2、3、5、8、13、21、34、55......要求计算用这个递归算法,计算出这组数的第40个数是多少?
-- 斐波纳契数列的定义:它的第一项和第二项均为1,以后各项都是前两项之和。
CREATE or REPLACE FUNCTION F_Get_fibonacci(uN IN NUMBER) RETURN NUMBER IS
uR NUMBER;
BEGIN
IF uN<=0 THEN -- 判断数值是否小于0
uR := 0; -- 返回数值0
END IF;
IF (uN = 1 OR uN = 2) THEN -- 判断位数是否是1或2
uR := 1; -- 返回数值1
END IF;
IF (uN >= 3) THEN -- 大于位数 3
-- 进行递归运算,返回指定位数前两位数的和
uR := F_Get_fibonacci(uN-1) + F_Get_fibonacci(uN-2);
END IF;
RETURN(uR);
END F_Get_fibonacci;
SQL> SELECT F_Get_fibonacci(40) FROM DUAL;
F_GET_FIBONACCI(40)
-------------------
102334155
1行被选择,耗时 72.057 秒
SQL>