我试图创建一个函数来计算Fibonacci序列的第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;
这得到:
警告:执行完成后会发出警告 功能fib_mohamed_h(x编译。
我做错了什么?
答案 0 :(得分:3)
您似乎已将函数声明和对函数的调用合并为一个无效块。它看起来几乎像一个剪切和粘贴错误。根据你的逻辑,函数应该是:
CREATE OR REPLACE FUNCTION fib_mohamed_h(x number)
RETURN number IS
f number;
BEGIN
IF (x<3) THEN
f := 1;
ELSE
f := fib_mohamed_h(x-1)+fib_mohamed_h(x-2);
END IF;
RETURN f;
END;
/
电话可能是:
set serveroutput on size unlimited
DECLARE
x number;
fibbonnacci number;
BEGIN
x:= 3;
fibbonnacci := fib_mohamed_h(x);
dbms_output.put_line(' Fibbonnacci '|| x || ' is ' || fibbonnacci);
END;
/
anonymous block completed
Fibbonnacci 3 is 2
或者从纯SQL:
SELECT fib_mohamed_h(7) FROM dual;
FIB_MOHAMED_H(7)
----------------
13