2013-04-18 77 views
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,我很困惑右邊的數字如何增加。能否詳細向我解釋一下這個PL/SQL語句?

+0

哪一部分讓你糊塗的傢伙您所需的解決方案?或者整個代碼在頭上?具體在'SO'中。 –

+0

好吧,我現在知道斐波納契數字是下一個數字前兩個數字的總和。某人如何顯示Fn-3,Fn和Fn + 3?這是否意味着每次增加3? – DaBulls33

回答

1

打印的順序是fibonacci numbers。它們的遞歸定義如下:a_n = a_(n-1) + a_(n-2)。在代碼片段中,p的作用是a_(n-2),qa_(n-1)。想象一下,從右向左打印的序列疊加了滑動窗口(r, q, p)。在每次迭代中,窗口向左移動一步。 lpad函數將字符串填充到給定的長度。您可以選擇添加第三個參數,即填充字符(默認爲)。注意有一個兄弟功能rpad。但是如果代碼已經在課堂上討論過了,你可能會知道這一點。

+0

我怎樣才能得到這個循環從30開始到80結束,而不是顯示不在該範圍內的數字? – DaBulls33

+0

@ DaBulls33我已經給出瞭解決方案 – misguided

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; 
相關問題