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;

クラスの 1 つでこれについて説明しましたが、この for ループがどのように機能するかをよく理解していませんでした。出力が左側に0〜20の数字を出力することは知っていますが、右側の数字がどのように増加するかについて混乱しています。

4

2 に答える 2

1

印刷された数列はフィボナッチ数です。それらの再帰的な定義は次のとおりa_n = a_(n-1) + a_(n-2)です。コード スニペットでは、pの役割を果たします。スライド ウィンドウ ( ) を重ねて、右から左に印刷されたシーケンスを想像してください。各反復で、ウィンドウは 1 ステップ左に移動します。この関数は、指定された長さになるまで文字列をパディングします。オプションで、3 番目の引数であるパディング文字 (デフォルトは) を追加できます。兄弟機能があることに注意してください。しかし、クラスでコードについて話し合ったことがある場合は、おそらくこれを知っているでしょう。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 に答える