有人能给我详细解释一下这个PL/SQL语句吗?
我们在我的一节课上讨论了这个问题,但我并没有真正理解for循环是如何工作的。我知道输出会在左边打印数字0-20,我对右边的数字是如何增加的感到困惑。打印的顺序是相同的。它们的递归定义如下:有人能给我详细解释一下这个PL/SQL语句吗?,sql,oracle,plsql,plsqldeveloper,Sql,Oracle,Plsql,Plsqldeveloper,我们在我的一节课上讨论了这个问题,但我并没有真正理解for循环是如何工作的。我知道输出会在左边打印数字0-20,我对右边的数字是如何增加的感到困惑。打印的顺序是相同的。它们的递归定义如下:a\u n=a\u(n-1)+a\u(n-2)。在代码片段中,p扮演a(n-2),q扮演a(n-1)。想象一下,从右到左打印的序列上叠加了一个滑动窗口(r,q,p)。在每次迭代中,窗口向左移动一步。lpad函数将字符串填充到给定长度。您可以选择添加第三个参数,即填充字符(默认为)。注意,有一个同级函数rpad。
a\u n=a\u(n-1)+a\u(n-2)
。在代码片段中,p
扮演a(n-2)
,q
扮演a(n-1)
。想象一下,从右到左打印的序列上叠加了一个滑动窗口(r,q,p
)。在每次迭代中,窗口向左移动一步。lpad
函数将字符串填充到给定长度。您可以选择添加第三个参数,即填充字符(默认为
)。注意,有一个同级函数rpad
。但是,如果在课堂上讨论过代码,您可能知道这一点。@DaBulls33请在下面找到您需要的解决方案
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;
哪一部分让你困惑,伙计?还是整个密码都在头上?具体到
中,所以。好的,我现在得到斐波那契数是前两个数在下一个数之前的总和。如何显示Fn-3、Fn和Fn+3?这是否意味着每次递增3?我如何才能使循环从30开始,到80结束,而不显示不在该范围内的数字?@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;