0
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,我对右侧的数字如何增加感到困惑。

4

2 回答 2

1

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

于 2013-04-18T20:46:11.407 回答
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;
于 2013-04-19T05:21:23.493 回答