PL SQL - последовательность ленивых провизоров - PullRequest
0 голосов
/ 04 ноября 2018

Мне нужно написать программу на PL / SQL, чтобы распечатать первые 10 чисел последовательности Lazy Caterer. У меня проблемы. Я не понимаю как это сделать Последовательность ленивого провизора имеет формулу 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 голосов
/ 05 ноября 2018

Я обманул и посмотрел Алгоритм Ленивого Кейтерера в Википедии . Это реализация упрощенного варианта формулы:

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
/
0 голосов
/ 04 ноября 2018
DECLARE
    n NUMBER := 1;
BEGIN
    FOR i IN 1..10 LOOP
        n := n + i;
        DBMS_OUTPUT.PUT_LINE(n);
    END LOOP;
END;
/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...