PL / PGSQL.Как работает этот цикл в примере Фибоначчи - PullRequest
0 голосов
/ 08 октября 2018
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;

Я предполагаю, что j начинается с 1 и i = 1, когда n =1, когда N = 2, j становится 2, так что строка становится 2, 3 (i и J)

Однако i = 1, когда n = 2.Что я не так понял?

Ответы [ 2 ]

0 голосов
/ 08 октября 2018
SELECT j, i + j

возвращает одну строку с двумя столбцами

Добавление

... INTO i, j

сохраняет первый столбец в переменной i, а второй - в переменной j.

Итак, вы сделали два назначения в одном операторе.

Следующий псевдокод показывает, что происходит:

col1 := j;
col2 := i + j;
i := col1;
j := col2;
0 голосов
/ 08 октября 2018

i начинается с 0, j начинается с 1. Когда n = 2, выполняются два цикла.

Каждый цикл i получает текущее значение jj увеличивается на текущее значение i (до того, как ему присвоено значение j).

Первый цикл: i становится 1 (j равно 1), иj становится / остается 1: i (0) + j (1) = 1

Второй цикл, i становится / остается 1 (j по-прежнему 1), j становится 2: i (1) + j (1) = 2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...