【发布时间】:2015-02-25 21:25:30
【问题描述】:
我正在尝试创建一个函数来计算斐波那契数列的第 N 个元素。
CREATE OR REPLACE FUNCTION fib_mohamed_h(x number)
RETURN number IS
f number;
DECLARE
num number;
fibbonnacci number
BEGIN
IF (x<3) THEN
f := 1;
ELSE
f := fib_mohamed_h(x-1)+fib_mohamed_h(x-2);
END IF;
RETURN f;
x:= 3;
fibbonnacci := fib_mohamed_h(x);
dbms_output.put_line(' Fibbonnacci '|| x || ' is ' || fibbonnacci);
END;
这得到:
警告:执行完成但有警告 FUNCTION fib_mohamed_h(x 已编译。
我做错了什么?
【问题讨论】:
-
请添加完整存储过程
-
以及实际的错误;不确定这是哪个客户端,但您可以查询
user_errors视图以获取详细信息。 -
我是一个新手,可以帮助我在 plsql 中计算斐波那契数列的第 N 个元素
-
我认为问题不在于你的逻辑,而在于你如何创建函数。请编辑您的问题以显示 complete 函数创建语句,而不仅仅是它中间的那个小 sn-p。 ('Compiled' 消息使您看起来好像在 create 语句中错误地使用了双引号,但只显示整个内容,而来自
user_errors的错误消息将使问题变得清晰)。 -
顺便说一句,这部分:
IF (x<3) THEN不正确。斐波那契函数应该为 0 返回 0,并且也有负数的值。如果您只想返回自然数的斐波那契数,那么当您的函数使用 0 或更少的数字调用时,您应该引发异常。