有人可以向我详细解释这个PL / SQL语句吗?

时间:2013-04-18 20:40:58

标签: sql oracle plsql plsqldeveloper

DECLARE
    p NUMBER := 0;
    q NUMBER := 1;
    r NUMBER;
BEGIN
    DBMS_OUTPUT.PUT_LINE(LPAD('0: ', 4) || LPAD(p, 10)); 
    DBMS_OUTPUT.PUT_LINE(LPAD('1: ', 4) || LPAD(q, 10)); 
    FOR k IN 2..20 LOOP 
        r := p + q;
            DBMS_OUTPUT.PUT_LINE(LPAD(k, 2) || ': ' || LPAD(r, 10)); 
            p := q;
            q := r;
    END LOOP;
END;

我们在我的一个课程中讨论了这个问题,但我并没有真正理解这个for循环是如何工作的。我知道输出打印左边的数字0-20,我很困惑右边的数字是如何增加的。

2 个答案:

答案 0 :(得分:1)

打印的序列是fibonacci numbers。他们的递归定义为:a_n = a_(n-1) + a_(n-2)。在代码段中,p的角色为a_(n-2)q a_(n-1)。想象从右到左打印的序列,叠加滑动窗口(r, q, p)。在每次迭代中,窗口向左移动一步。 lpad函数将字符串填充到给定长度。您可以选择添加第三个参数,即填充字符(默认为)。请注意,有一个兄弟函数rpad。但如果代码已在课堂上讨论过,你可能知道这一点。

答案 1 :(得分:0)

@ DaBulls33请在下面找到所需的解决方案

DECLARE
p NUMBER := 0;
q NUMBER := 1;
r NUMBER;
BEGIN
FOR k IN 2..80 LOOP 
    r := p + q;
     IF K >29 THEN
      DBMS_OUTPUT.PUT_LINE(LPAD(k, 2) || ': ' || LPAD(r, 10));
      END IF;
        p := q;
        q := r;
END LOOP;
END;