帕斯卡函数步骤
Function steps in pascal
我有下面的代码,结果是42,但是为什么呢?答案必须是 13,因为 7+6=13
.
program HelloWorld;
function F (a : integer) : integer;
begin
if (a = 1) or (a = 2) then
F := 2
else
F := F(a-1) + F(a-2);
end;
begin
WriteLn(F(8));
end.
您并没有像您声称的那样只添加 7+6
。如果需要,您需要更改此行:
F := F(a-1) + F(a-2);
改为:
F := (a-1) + (a-2);
否则,你实际上是在添加F(7)+F(6)
,即:
(F(6) + F(5)) + (F(5) + F(4))
即:
((F(5) + F(4)) + (F(4) + F(3))) + ((F(4) + F(3)) + (F(3) + F(2)))
依此类推,每次递归调用 F(a)
其中 a > 2
。这就是为什么您最终得到 42 而不是 13 的结果。
function f(a : Integer) : Integer;
begin
if (a=1) OR (a=2) then
Result := 2
else
Result := (a-1) + (a-2);
end;
f(8)
Result = 13
我有下面的代码,结果是42,但是为什么呢?答案必须是 13,因为 7+6=13
.
program HelloWorld;
function F (a : integer) : integer;
begin
if (a = 1) or (a = 2) then
F := 2
else
F := F(a-1) + F(a-2);
end;
begin
WriteLn(F(8));
end.
您并没有像您声称的那样只添加 7+6
。如果需要,您需要更改此行:
F := F(a-1) + F(a-2);
改为:
F := (a-1) + (a-2);
否则,你实际上是在添加F(7)+F(6)
,即:
(F(6) + F(5)) + (F(5) + F(4))
即:
((F(5) + F(4)) + (F(4) + F(3))) + ((F(4) + F(3)) + (F(3) + F(2)))
依此类推,每次递归调用 F(a)
其中 a > 2
。这就是为什么您最终得到 42 而不是 13 的结果。
function f(a : Integer) : Integer;
begin
if (a=1) OR (a=2) then
Result := 2
else
Result := (a-1) + (a-2);
end;
f(8)
Result = 13