我需要编写一个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
答案 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
/