PL / PGSQL。斐波纳契示例中的此循环语句如何工作

时间:2018-10-08 12:26:40

标签: postgresql stored-procedures plpgsql

CREATE OR REPLACE FUNCTION fibonacci (n INTEGER) 
   RETURNS INTEGER AS $$ 
DECLARE
   counter INTEGER := 0; 
   i INTEGER := 0; 
   j INTEGER := 1;
BEGIN
   IF (n < 1) THEN
      RETURN 0;
   END IF; 

   LOOP 
      EXIT WHEN counter = n; 
      counter := counter + 1; 
      SELECT j, i + j INTO i, j;
   END LOOP; 
   RETURN i;
END; 
$$ LANGUAGE plpgsql;

大家好,我认为上面的代码很简单,但是我不明白一行是如何工作的,

SELECT j, i + j INTO i, j;

我假设当n = 1时j从1开始且i = 1 当N = 2时,j变成2,所以线变成2、3(i和J)

但是,当n = 2时,i = 1。我怎么了?

2 个答案:

答案 0 :(得分:0)

i从0开始,j从1开始。当n = 2时,执行两个循环。

每个循环,i获得j的当前值,并且j递增i的当前值(在为其分配{{ 1}})。

第一个循环:j变为1(i为1),而j变为/保持为1:j(0)+ i(1 )= 1

第二个循环,j变成/保持1(i仍然是1),j变成2:j(1)+ i(1 )= 2

答案 1 :(得分:0)

SELECT j, i + j

返回两列的一行

追加

... INTO i, j

将第一列存储在变量i中,将第二列存储在变量j中。

因此,您在一条语句中进行了两次分配。

以下伪代码显示了正在发生的事情:

col1 := j;
col2 := i + j;
i := col1;
j := col2;