pl/sql 中数字的阶乘(未显示正确的输出)
Factorial of a number in pl/sql (Not showing the correct output)
我在 pl/sql 中写下了代码,但没有显示输出
这段代码有问题。
declare
num number(20):= 0;
val number(10):= 5;
temp number(10):= 0;
function factorial (n1 in number)
return number
is
fact number(10):= 1;
begin
temp:= n1;
loop
if fact <=0 then
exit;
else
fact := fact *temp;
temp:=temp-1;
end if;
end loop;
return fact;
end;
begin
num:= factorial(val);
dbms_output.put_line('Factorial of ' ||val||' is '||num);
end;
输出:- 5 的阶乘为 0
您正在检查 fact <= 0
而不是检查 temp <= 0
并且您还应该在函数本地声明 temp
变量:
declare
val number(10):= 5;
function factorial (n1 in number)
return number
is
fact number(10) := 1;
temp number(10) := n1;
begin
loop
if temp <=0 then
exit;
else
fact := fact *temp;
temp:=temp-1;
end if;
end loop;
return fact;
end;
begin
dbms_output.put_line('Factorial of ' ||val||' is '|| factorial(val) );
end;
/
或者,更简单地说:
declare
val number(10):= 5;
function factorial (n1 in number)
return number
is
fact number(10) := 1;
BEGIN
FOR temp IN 2 .. n1
LOOP
fact := fact *temp;
END LOOP;
RETURN fact;
END;
begin
dbms_output.put_line('Factorial of ' ||val||' is '|| factorial(val) );
end;
/
db<>fiddle here
行:
if fact <=0 then
应该是:
if temp <=0 then
你真的不需要 'else' 部分,因为 'if' 无论如何都会退出循环;所以你可以这样做:
loop
if temp <=0 then
exit;
end if;
fact := fact *temp;
temp:=temp-1;
end loop;
或者使用 while 循环避免显式检查:
while temp > 0 loop
fact := fact *temp;
temp:=temp-1;
end loop;
...等等
我在 pl/sql 中写下了代码,但没有显示输出 这段代码有问题。
declare
num number(20):= 0;
val number(10):= 5;
temp number(10):= 0;
function factorial (n1 in number)
return number
is
fact number(10):= 1;
begin
temp:= n1;
loop
if fact <=0 then
exit;
else
fact := fact *temp;
temp:=temp-1;
end if;
end loop;
return fact;
end;
begin
num:= factorial(val);
dbms_output.put_line('Factorial of ' ||val||' is '||num);
end;
输出:- 5 的阶乘为 0
您正在检查 fact <= 0
而不是检查 temp <= 0
并且您还应该在函数本地声明 temp
变量:
declare
val number(10):= 5;
function factorial (n1 in number)
return number
is
fact number(10) := 1;
temp number(10) := n1;
begin
loop
if temp <=0 then
exit;
else
fact := fact *temp;
temp:=temp-1;
end if;
end loop;
return fact;
end;
begin
dbms_output.put_line('Factorial of ' ||val||' is '|| factorial(val) );
end;
/
或者,更简单地说:
declare
val number(10):= 5;
function factorial (n1 in number)
return number
is
fact number(10) := 1;
BEGIN
FOR temp IN 2 .. n1
LOOP
fact := fact *temp;
END LOOP;
RETURN fact;
END;
begin
dbms_output.put_line('Factorial of ' ||val||' is '|| factorial(val) );
end;
/
db<>fiddle here
行:
if fact <=0 then
应该是:
if temp <=0 then
你真的不需要 'else' 部分,因为 'if' 无论如何都会退出循环;所以你可以这样做:
loop
if temp <=0 then
exit;
end if;
fact := fact *temp;
temp:=temp-1;
end loop;
或者使用 while 循环避免显式检查:
while temp > 0 loop
fact := fact *temp;
temp:=temp-1;
end loop;
...等等