PL SQL-惰性承办酒席的顺序

时间:2018-11-04 13:33:41

标签: oracle plsql

我需要编写一个PL / SQL程序以打印出Lazy Caterer序列的前10个数字。我有麻烦了我不知道该怎么做 惰性承办酒席的顺序具有公式F(1)=2, F(n)=F(n-1)+n。 例如F(2) = F(1) + 2 = 2+2=4; F(3) = F(2)+3 = 4+3=7

请使用循环。您打印出的数字应该看起来像

2
4
7
...
56

2 个答案:

答案 0 :(得分:2)

DECLARE
    n NUMBER := 1;
BEGIN
    FOR i IN 1..10 LOOP
        n := n + i;
        DBMS_OUTPUT.PUT_LINE(n);
    END LOOP;
END;
/

答案 1 :(得分:0)

我作弊并抬起头来Lazy Caterer's algorithm on Wikipedia。这是该公式的简化版本的实现:

create or replace function lc_algo 
    (n in number)
    return number as
begin
    return (power(n,2) + n + 2) / 2;
end;
/

我承认它不使用循环,但是很难理解为什么有人需要这样做。但是,如果您的作业坚持循环执行(因为性能不是您的选择),您可以执行以下操作:

create or replace function lc_algo 
    (n in number)
    return number 
as
    rv simple_integer := 1;
begin
    for i in 1..n loop
        rv := rv + i;
    end loop;
    return rv;
end;
/

要获取前十个数字(使用任何版本):

select lc_algo(level) -- assuming you don't want to start with f(0)
from dual
connect by level <= 10
/