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。我怎么了?
答案 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;