我正在尝试使用递归的概念但是使用for do循环。但是我的程序无法做到。例如,如果我想输出4!答案应该是24但我的输出是12.有人可以帮助我吗?
program pastYear;
var
n,i:integer;
function calculateFactorial ( A:integer):real;
begin
if A=0 then
calculateFactorial := 1.0
else
for i:= A downto 1 do
begin
j:= A-1;
calculateFactorial:= A*j;
end;
end;
begin
writeln( ' Please enter a number ');
readln ( n);
writeln ( calculateFactorial(n):2:2);
readln;
end.
答案 0 :(得分:2)
您的代码中存在几个问题。
j
。 什么是递归?递归函数调用自身。因此,在您的情况下calculateFactorial
需要调用自己。
如何声明阶乘函数?
用语言说:
n
的阶乘被声明为当
n
等于0
时,- 1
- 当
n-1
大于n
时,n
的阶乘乘以0
所以你看到阶乘函数的定义已经是递归的,因为当n
大于0
时,它就是指自己。
这可以用于Pascal代码:
function Factorial(n: integer): integer;
begin
if n = 0 then
Result := 1
else if n > 0 then
Result := Factorial(n - 1) * n;
end;
不,我们可以做一些优化:
integer
(可以表示负数)更改为longword
(只能表示正数)。longword
可存储的最大值为4294967295,是longint
可存储的两倍。if
语句。 结果如下:
function Factorial(n: longword): longword;
begin
if n = 0 then
Result := 1
else
Result := Factorial(n - 1) * n;
end;