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,我很困惑右边的数字是如何增加的。
答案 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;