修复PL/pgSQL生成斐波那契序列缺失0和1的问题
修复后的斐波那契序列生成函数
原函数的问题在于初始化后未返回序列的前两个核心数(0和1),直接进入循环计算后续值,导致开头的关键元素被遗漏。
以下是修复后的PL/pgSQL函数:
CREATE OR REPLACE FUNCTION fnc_fibonacci (pstop INTEGER DEFAULT 10) RETURNS TABLE (fibonacci_num INTEGER) AS $BODY$ DECLARE a INTEGER; b INTEGER; c INTEGER; BEGIN a := 0; b := 1; -- 先返回0(若小于pstop) IF a < pstop THEN fibonacci_num := a; RETURN NEXT; END IF; -- 再返回1(若小于pstop) IF b < pstop THEN fibonacci_num := b; RETURN NEXT; END IF; -- 循环生成后续斐波那契数 LOOP c := a + b; EXIT WHEN c >= pstop; -- 达到或超过pstop则退出循环 fibonacci_num := c; RETURN NEXT; a := b; b := c; END LOOP; END; $BODY$ LANGUAGE PLPGSQL; -- 测试调用 SELECT * FROM fnc_fibonacci(20);
测试结果
执行查询后,输出将完整返回所有小于指定值的斐波那契数:
fibonacci_num -------------- 0 1 2 3 5 8 13
内容的提问来源于stack exchange,提问作者Evgeny Step
相关产品推荐
相关产品推荐

