在哪种情况下递归可以在PL / SQL中使用
CREATE OR REPLACE FUNCTION factorial (
n POSITIVE
) RETURN POSITIVE
IS
BEGIN
IF n = 1 THEN
RETURN n;
ELSE
RETURN n * factorial(n-1);
END IF;
END;
BEGIN
FOR i IN 1..5 LOOP
DBMS_OUTPUT.PUT_LINE(i || '! = ' || factorial(i));
END LOOP;
END;
这将有效,但我想在现实世界中了解数据库查询中需要递归
答案 0 :(得分:3)
取决于您的意思"必需"。递归算法总是可以重写为循环,并且循环总是可以重写为递归算法(假设您正在使用的语言支持循环和函数调用)。一些算法往往更容易通过递归实现,而其他算法往往更容易通过循环实现。
使用递归来计算PL / SQL中的阶乘是一个合理的实现选择。使用循环也是合理的。如果你想在纯SQL中而不是诉诸PL / SQL,你也可以
select round( exp( sum( ln( level ) ) ) )
from dual
connect by level <= <<some number>>
您使用哪种合理的实施方案取决于多种因素 - 您最熟悉的方法,各种实施的速度等等。